gcc g 編譯過程

2022-04-08 20:54:25 字數 1193 閱讀 5420

階段輸入

輸出工具

示例預編譯

*.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 搜...