實例代碼:
/*
* hello.c - Canonical "Hello, World!" program
*/
#include <stdio.h>
int main(void)
{
printf("Hello,Linux programming world!\n");
return 0;
}
在命令行上鍵入以下命令編譯和運行這段程序:
$gcc hello.c -o hello
$./hello
Hello, Linux programming world!
第一行命令告訴gcc對源代碼hello.c進行編譯和鏈接,并使用-o參數(shù)指定創(chuàng)建名為hello的可見程序.第二行命令執(zhí)行hello這個程序,第三行是程序的執(zhí)行結(jié)果.
其實,gcc首先運行預(yù)處理程序cpp來展開hello.c中的宏并在其中插入#include文件所包含的內(nèi)容:然后把預(yù)處理后的源代碼編譯成為目標(biāo)代碼;最后,鏈接程序ld創(chuàng)建一個名為hello的二進制文件.
現(xiàn)在我們來通過手工操作重新創(chuàng)建這些步驟,以逐步執(zhí)行編譯過程.第一布是運行預(yù)處理器.使用-E選項告訴gcc在預(yù)處理后停止編譯過程:
$gcc -E hello.c -o hello.cpp
此時查看hello.cpp會發(fā)現(xiàn)stdio.h的內(nèi)容確實都插到文件里去了,而其他應(yīng)當(dāng)被預(yù)處理的標(biāo)記也做了類似處理.
下一步是將hello.cpp編譯為目標(biāo)代碼.可使用gcc的-c選項來完成:
$gcc -x cpp-output -c hello.cpp -o hello.o
-x選項告訴gcc從指定的步驟開始編譯,在本例中也就是編譯器處理后的源代碼(cpp-output).
gcc是怎么知道如何處理某種特殊類型的文件呢?它是依靠文件的擴展名來決定如何正確處理該文件的.
——————————————————————————————
擴展名 類型
.c C語言源代碼
.C,.cc C++語言源代碼
.i 預(yù)處理后的C源代碼
.ii 預(yù)處理后的C++源代碼
.S,.s 匯編語言源代碼
.o 編譯后的目標(biāo)代碼
.a,.so 編譯后的庫代碼
———————————————————————————————
最后,鏈接目標(biāo)文件,生成二進制代碼.
$gcc hello.c -o hello
/*
* hello.c - Canonical "Hello, World!" program
*/
#include <stdio.h>
int main(void)
{
printf("Hello,Linux programming world!\n");
return 0;
}
在命令行上鍵入以下命令編譯和運行這段程序:
$gcc hello.c -o hello
$./hello
Hello, Linux programming world!
第一行命令告訴gcc對源代碼hello.c進行編譯和鏈接,并使用-o參數(shù)指定創(chuàng)建名為hello的可見程序.第二行命令執(zhí)行hello這個程序,第三行是程序的執(zhí)行結(jié)果.
其實,gcc首先運行預(yù)處理程序cpp來展開hello.c中的宏并在其中插入#include文件所包含的內(nèi)容:然后把預(yù)處理后的源代碼編譯成為目標(biāo)代碼;最后,鏈接程序ld創(chuàng)建一個名為hello的二進制文件.
現(xiàn)在我們來通過手工操作重新創(chuàng)建這些步驟,以逐步執(zhí)行編譯過程.第一布是運行預(yù)處理器.使用-E選項告訴gcc在預(yù)處理后停止編譯過程:
$gcc -E hello.c -o hello.cpp
此時查看hello.cpp會發(fā)現(xiàn)stdio.h的內(nèi)容確實都插到文件里去了,而其他應(yīng)當(dāng)被預(yù)處理的標(biāo)記也做了類似處理.
下一步是將hello.cpp編譯為目標(biāo)代碼.可使用gcc的-c選項來完成:
$gcc -x cpp-output -c hello.cpp -o hello.o
-x選項告訴gcc從指定的步驟開始編譯,在本例中也就是編譯器處理后的源代碼(cpp-output).
gcc是怎么知道如何處理某種特殊類型的文件呢?它是依靠文件的擴展名來決定如何正確處理該文件的.
——————————————————————————————
擴展名 類型
.c C語言源代碼
.C,.cc C++語言源代碼
.i 預(yù)處理后的C源代碼
.ii 預(yù)處理后的C++源代碼
.S,.s 匯編語言源代碼
.o 編譯后的目標(biāo)代碼
.a,.so 編譯后的庫代碼
———————————————————————————————
最后,鏈接目標(biāo)文件,生成二進制代碼.
$gcc hello.c -o hello