階段輸入
輸出工具
示例預編譯
*.c*.i
預處理器cpp
gcc –e test.c –o test.i
編譯*.i
*.s 彙編**
編譯器egcs
gcc –s test.i –o test.s
彙編*.s
*.o 目標**
彙編器as
gcc –c test.s –o test.o
鏈結*.o
可執行檔案
聯結器ld
gcc test.o –o test
簡單理解:
預編譯:替換巨集定義的變數和include包含以及進行條件編譯;即如#define pi 3.1415,則將檔案中的pi用3.1415替換,include檔案包含和條件編譯同理。
編譯:生成組合語言。
彙編:生成機器語言。
示例**a.c:
#include
int main()
printf("hello\n");
預編譯過程:
這個過程處理巨集定義和include,並做語法檢查。
可以看到預編譯後,**從5行擴充套件到了910行。
gcc -e a.c -o a.i
cat a.c | wc -l
cat a.i | wc -l
編譯過程:
這個階段,生成彙編**。
gcc -s a.i -o a.s
cat a.s | wc -l
彙編過程:
這個階段,生成目標**。
此過程生成elf格式的目標**。
gcc -c a.s -o a.o
file a.o
a.o: elf 64-bit lsb relocatable, amd x86-64, version 1 (sysv), not stripped
鏈結過程。生成可執行**。鏈結分為兩種,一種是靜態鏈結,另外一種是動態鏈結。使用靜態鏈結的好處是,依賴的動態鏈結庫較少,對動態鏈結庫的版本不會很敏感,具有較好的相容性;缺點是生成的程式比較大。使用動態鏈結的好處是,生成的程式比較小,占用較少的記憶體。
gcc a.o -o a
程式執行:
./ahello
gcc(g 多檔案編譯
1.簡單程式 單模組程式 的編譯 檔案file1.c include int main 檔案file1.cpp include using std cout using std endl int main xiaochen freeware gcc file1.c o file1 xiaochen ...
gcc g 實戰之編譯的四個過程
gcc和g 分別是gnu 乙個開源組織 的c c 編譯器 對於.c字尾的檔案,gcc把它當做是c程式,g 當做是c 程式 對於.cpp字尾的檔案,gcc和g 都會當做c 程式。gcc可以根據字尾名為.c或.cpp分別按c程式和c 程式來編譯,但是g 無論是.c或.cpp都統一按c 程式來編譯。編譯階...
gcc g 編譯 wxwidgets的引數
簡單點 gcc編譯c程式,g 可編譯c和c 程式。a.可行的命令格式 1.g main.cpp o c.out wx config cflags libs 2.g wx config cflags main.cpp o a.out wx config libs g 或 gcc的引數格式好像為 g 搜...