gcc使用大全

2021-05-22 11:43:23 字數 2760 閱讀 1416

第一步、是進行預編譯,使用-e 引數可以讓gcc 在預處理結束後停止編譯過程:

gcc -e hello.c -o hello.i

預處理的巨集定義插入到hello.i 中

第二步、是將hello.i 編譯為目標**,這可以通過使用-c 引數來完成:

gcc -c hello.i -o hello.o

也可以通過原始檔直接生成

gcc -c hello.c

第三步、是將生成的目標檔案鏈結成可執行檔案:

gcc hello.o -o hello

也可以通過原始檔直接生成

gcc -o hello hello.c

警告: 1

、-pedantic 選項,那麼使用了擴充套件語法的地方將產生相應的警告資訊 2

、-wall 使用它能夠使gcc 產生盡可能多的警告資訊 3

、-werror ,它要求gcc 將所有的警告當成錯誤進行處理

庫依賴: 1

、linux 下的大多數函式都預設:

標頭檔案放到/usr/include/ 目錄下

而庫檔案則放到/usr/lib/ 目錄下 2

、gcc 在編譯時必須有自己的辦法來查詢所需要的標頭檔案和庫檔案。 -i

選項可以向gcc 的標頭檔案搜尋路徑中新增新的目錄。

例如,如果在/home/xiaowp/include/ 目錄下有編譯時所需要的標頭檔案,為了讓gcc 能夠順利地找到它們,就可以使用-i 選項:

gcc -o test test.c -i /home/xiaowp/include -l

選項向gcc 的庫檔案搜尋路徑中新增新的目錄

例如,如果在/home/xiaowp/lib/ 目錄下有鏈結時所需要的庫檔案libfoo.so ,為了讓gcc 能夠順利地找到它,可以使用下面的命令

gcc -o test test.c -l /home/xiaowp/lib -lfoo

值得好好解釋一下的是-l 選項,它指示gcc 去連線庫檔案libfoo.so 。

linux

下的庫檔案在命名時有乙個約定,那就是應該以lib 三個字母開頭,由於所有的庫檔案都遵循了同樣的規範,因此在用-l 選項指定鏈結的庫檔名時可以省去lib 三個字母,也就是說gcc 在對-lfoo 進行處理時,會自動去鏈結名為libfoo.so 的檔案。

-static

選項,強制使用靜態鏈結庫

如果在/home/xiaowp/lib/ 目錄下有鏈結時所需要的庫檔案libfoo.so 和libfoo.a

為了讓gcc 在鏈結時只用到靜態鏈結庫,可以使用下面的命令:

gcc -o test test.c -l /home/xiaowp/lib -static -lfoo

選項-o 可以告訴gcc 同時減小**的長度和執行時間,其效果等價於-o1 。

在這一級別上能夠進行的優化型別雖然取決於目標處理器,但一般都會包括執行緒跳轉(thread jump )和延遲退棧(deferred stack pops )兩種優化。

選項-o2 告訴gcc 除了完成所有-o1 級別的優化之外,同時還要進行一些額外的調整工作,如處理器指令排程等。

選項-o3 則除了完成所有-o2 級別的優化之外,還包括迴圈展開和其它一些與處理器特性相關的優化工作。

通常來說,數字越大優化的等級越高,同時也就意味著程式的執行速度越快。

許多linux 程式設計師都喜歡使用-o2 選項,因為它在優化長度、編譯時間和**大小之間,取得了乙個比較理想的平衡點。

time ./test

檢視程式執行時間

優化雖然能夠給程式帶來更好的執行效能,但在如下一些場合中應該避免優化**:

程式開發的時候優化等級越高,消耗在編譯上的時間就越長,因此在開發的時候最好不要使用優化選項,只有到軟體發行或開發結束的時候,才考慮對最終生成的**進行優化。

資源受限的時候一些優化選項會增加可執行**的體積,如果程式在執行時能夠申請到的記憶體資源非常緊張(如一些實時嵌入式裝置),那就不要對**進行優化,因為由這帶來的負面影響可能會產生非常嚴重的後果。

跟蹤除錯的時候在對**進行優化的時候,某些**可能會被刪除或改寫,或者為了取得更佳的效能而進行重組,從而使跟蹤和除錯變得異常困難。

加速:

使用管道代替編譯中臨時檔案,

-pipe

加速編譯

gcc -pipe foo.c -o foo

gcc常用選項

-c 通知gcc 取消鏈結步驟,即編譯原始碼並在最後生成目標檔案;

-dmacro

定義指定的巨集,使它能夠通過原始碼中的#ifdef 進行檢驗;

-e 不經過編譯預處理程式的輸出而輸送至標準輸出;

-g3

獲得有關除錯程式的詳細資訊,它不能與-o 選項聯合使用;

-idirectory

在包含檔案搜尋路徑的起點處新增指定目錄;

-llibrary

提示鏈結程式在建立最終可執行檔案時包含指定的庫; -o

、-o2 、-o3 將優化狀態開啟,該選項不能與-g 選項聯合使用;

-s 要求編譯程式生成來自源**的匯程式設計序輸出;

-v 啟動所有警報;

-wall

在發生警報時取消編譯操作,即將警報看作是錯誤; 強烈建議你寫每乙個編譯命令時都加上-wall 選項

-werror

在發生警報時取消編譯操作,即把報警當作是錯誤;

-w 禁止所有的報警。

gcc命令大全

gcc 選項 gcc 有超過 100 個的編譯選項可用.這些選項中的許多你可能永遠都不會用 到,但一些主要的選項將會頻繁用到.很多的 gcc 選項包括乙個以上的字元.因此你必須為每個選項指定各自的連字元,並且就象大多數 linux 命令一樣你 不能在乙個單獨的連字元後跟一組選項.當你不用任何選項編譯...

gcc使用入門

gcc wall hello.c o hello一定加上 wall顯示警告資訊,並修改 重複編譯直到消除所有warning c c 是很不安全的 gcc wall main.c hello fn.c o newhello無需指定.h檔案 gcc wall c main.c gcc wall c he...

gcc使用初步

unix linux系統支援眾多的程式語言,而 c語言是其宿主語言。所以,在 unix linux 環境下,c語言用的做好,也用的最多。c 是擴充套件的 c語言,它在 c語言的基礎上成功地實現了物件導向程式設計的思想,提供了從 c語言轉換到更高程式設計的理想途徑。目前,linux 平台上最常用的 c...