00. 目錄
文章目錄
00. 目錄01. 指令概述02. 指令格式03. 常用選項04. 參考示例05. 附錄
01. 指令概述
gcc指令使用GNU推出的基于C/C++的編譯器,是開放源代碼領域應用最廣泛的編譯器,具有功能強大,編譯代碼支援性能優化等特點。
gcc是GNU編譯器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go語言和D語言的前端,也包括了這些語言的庫(如libstdc++、libgcj等等)。GCC的初衷是為GNU作業系統專門編寫的一款編譯器。GNU系統是徹底的自由軟體。此處,“自由”的含義是它尊重使用者的自由。
02. 指令格式
用法:gcc [選項] 檔案...
03. 常用選項
-pass-exit-codes 在某一階段退出時傳回最高的錯誤碼
--help 顯示此幫助說明
--target-help 顯示目标機器特定的指令行選項
--help={common|optimizers|params|target|warnings|[^]
{joined|separate|undocumented}}[,...]
顯示特定類型的指令行選項
(使用‘-v --help’顯示子程序的指令行參數)
--version 顯示編譯器版本資訊
-dumpspecs 顯示所有内建 spec 字元串
-dumpversion 顯示編譯器的版本号
-dumpmachine 顯示編譯器的目标處理器
-print-search-dirs 顯示編譯器的搜尋路徑
-print-libgcc-file-name 顯示編譯器伴随庫的名稱
-print-file-name=<庫> 顯示 <庫> 的完整路徑
-print-prog-name=<程式> 顯示編譯器元件 <程式> 的完整路徑
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory 顯示不同版本 libgcc 的根目錄
-print-multi-lib 顯示指令行選項和多個版本庫搜尋路徑間的映射
-print-multi-os-directory 顯示作業系統庫的相對路徑
-print-sysroot 顯示目标庫目錄
-print-sysroot-headers-suffix 顯示用于尋找頭檔案的 sysroot 字尾
-Wa,<選項> 将逗号分隔的 <選項> 傳遞給彙編器
-Wp,<選項> 将逗号分隔的 <選項> 傳遞給預處理器
-Wl,<選項> 将逗号分隔的 <選項> 傳遞給連結器
-Xassembler <參數> 将 <參數> 傳遞給彙編器
-Xpreprocessor <參數> 将 <參數> 傳遞給預處理器
-Xlinker <參數> 将 <參數> 傳遞給連結器
-save-temps 不删除中間檔案
-save-temps=<arg> 不删除中間檔案
-no-canonical-prefixes 生成其他 gcc 元件的相對路徑時不生成規範化的
字首
-pipe 使用管道代替臨時檔案
-time 為每個子程序計時
-specs=<檔案> 用 <檔案> 的内容覆寫内建的 specs 檔案
-std=<标準> 指定輸入源檔案遵循的标準
--sysroot=<目錄> 将 <目錄> 作為頭檔案和庫檔案的根目錄
-B <目錄> 将 <目錄> 添加到編譯器的搜尋路徑中
-v 顯示編譯器調用的程式
-### 與 -v 類似,但選項被引号包覆,并且不執行指令
-E 僅作預處理,不進行編譯、彙編和連結
-S 編譯到彙編語言,不進行彙編和連結
-c 編譯、彙編到目标代碼,不進行連結
-o <檔案> 輸出到 <檔案>
-pie Create a position independent executable
-shared Create a shared library
-x <語言> 指定其後輸入檔案的語言
允許的語言包括:c c++ assembler none
‘none’意味着恢複預設行為,即根據檔案的擴充名猜測
源檔案的語言
04. 參考示例
4.1 生成預設的可執行檔案
[deng@localhost bak]$ gcc test.c
[deng@localhost bak]$
将test.c預處理、彙編、編譯并連結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。
4.2 指定輸出檔案
[deng@localhost bak]$ gcc test.c -o test
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c
[deng@localhost bak]$
将test.c預處理、彙編、編譯并連結形成可執行檔案test。-o選項用來指定輸出檔案的檔案名。
4.3 僅作預處理,不進行編譯、彙編和連結
[deng@localhost bak]$ gcc -E test.c -o test.i
[deng@localhost bak]$
将test.c預處理輸出test.i檔案。
4.4 編譯到彙編語言,不進行彙編和連結
[deng@localhost bak]$ gcc -S test.c -o test.s
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.s
[deng@localhost bak]$
将預處理輸出檔案test.i彙編成test.s檔案。
4.5 編譯、彙編到目标代碼,不進行連結
[deng@localhost bak]$ gcc -c test.c -o test.o
[deng@localhost bak]$ ls
5th 6th 7th 8th 9th test test.c test.i test.o test.s
[deng@localhost bak]$
4.6 将目标代碼生成可執行檔案
[deng@localhost bak]$ gcc test.o -o test
[deng@localhost bak]$
将編譯輸出檔案test.o連結成最終可執行檔案test。
4.7 編譯時指定優化級别
[deng@localhost bak]$ gcc -O1 test.c -o test
[deng@localhost bak]$
使用編譯優化級别1編譯程式。級别為1~3,級别越大優化效果越好,但編譯時間越長。
4.8 多檔案編譯
[deng@localhost bak]$ gcc testfun.c test.c -o test
[deng@localhost bak]$
将testfun.c和test.c分别編譯後連結成test可執行檔案。
4.9 多檔案編譯方法二
[deng@localhost bak]$ gcc -c test.c
[deng@localhost bak]$ gcc -c testfun.c
[deng@localhost bak]$ gcc test.o testfun.o -o test
[deng@localhost bak]$