一 gcc編譯流程
1.預處理階段
gcc -e hello.c -o hello.i
說明:(1)-o 《輸出檔案》 :指定輸出檔案
(2)-e 只執行編譯預處理
該階段是讀取標頭檔案的內容,並把相應的內容插入到源**,預處理結束後停止編譯過程。
cat hello.i|less 檢視
2.編譯階段
gcc -s hello.i -o hello.s
cat hello.s
說明:(1) -s 將**轉換為彙編
該階段首先檢查**的規範性,是否有語法錯誤,檢查無誤後,將其翻譯為彙編**。
3.彙編階段
gcc -c hello.s -o hello.o
該階段彙編器將彙編**編譯成機器語言指令。
4.鏈結階段
gcc hello.o -o hello1
ls -l hello1
file hello1
gcc -static hello.o -o hello2
ls -l hello2
file hello2
5.gcc其它指令形式
(1) gcc -wall hello.c
2)顯示警告資訊
gcc -wall hello.c -o hello
說明:指定可執行檔名為hello。
(2)gcc -c -wall a.c b.c c.c d.c
說明:將多個原始檔生成對應的物件檔案。
(3)多個原始檔生成可執行檔案
gcc -wall hellomain.c sayhello.c -o hello
(4)鏈結gcc非預設庫函式
在編譯的時候要加入「-l庫的首字母」來進行編譯。
進一步說明:編譯程式時,得到undefined reference to '***x'的錯誤提示。
那一定時缺少某個庫,用-l引數將庫加入。linux的庫命名是一致的,一般為lib***.so, lib***.a, lib***.la, 那麼鏈結某個庫就用-l***, 去掉頭lib和字尾。
gcc hello.c -lm -o hello
程式中用到math.h,該檔案不是gcc預設的標頭檔案。
gcc編譯詳解
test.i test.s test.o include int main void 預編譯過程 處理巨集定義和include,並做語法檢查 gcc e test.c o test.i cat test.c wc l 6cat test.i wc l 855 編譯過程 生成彙編 gcc s test...
gcc編譯詳解
這些常用的 gcc g 命令列引數,你都知道麼?1.gcc e source file.c e,只執行到預編譯。直接輸出預編譯結果。2.gcc s source file.c s,只執行到源 到彙編 的轉換,輸出彙編 3.gcc c source file.c c,只執行到編譯,輸出目標檔案。4.g...
gcc常見的編譯指令
gcc 編譯器常用的命令列引數一覽 這些常用的 gcc g 命令列引數,你都知道麼?1.gcc e source file.c e,只執行到預編譯。直接輸出預編譯結果。2.gcc s source file.c s,只執行到源 到彙編 的轉換,輸出彙編 3.gcc c source file.c c...