linux gcc常用編譯選項大全+動態庫靜態庫的創建和使用

原文鏈接:https://blog.csdn.net/a568478312/article/details/79195218

-c:只激活預處理,編譯,和彙編,也就生成obj文件
-S:只激活預處理和編譯,就是指把文檔編譯成爲彙編代碼。
-E:只激活預處理,不生成文檔,需要把他重定向到一個輸出文檔裏。
-o:定製目標名稱,缺省的時候gcc 編譯出來的文檔是a.out
-ansi:關閉gnu c中和ansi c不兼容的特性,激活ansi c的專有特性。
-Dmacro:相當於C語言中的#define macro
-Dmacro=defn:相當於C語言中的#define macro=defn
-Umacro :相當於C語言中的#undef macro
-Idir:指定頭文件路徑
-I:指定include包含文件的搜索目錄
-llibrary:指定庫
-Ldir:定製編譯的時候,搜索庫的路徑。
-g:指示編譯器,在編譯的時候,產生調試信息。
-static:此選項將禁止使用動態庫,所以,編譯出來的東西,一般都很大。
-share:此選項將盡量使用動態庫,所以生成文檔比較小,但是需要系統由動態庫。
-O0 -O1 -O2 -O3:編譯器的優化選項的4個級別,-O0表示沒有優化,-O1爲缺省值,-O3優化級別最高
-Wall:會打開一些很有用的警告選項,建議編譯時加此選項。
-std:指定C標準,如-std=c99使用c99標準,-std=gnu99,使用C99 再加上 GNU 的一些擴展。

高級選項

-v:詳細輸出編譯過程中所採用的每一個選項
-C:預處理時保留註釋信息
-ggdb:在可執行文件中包含可供GDB使用的調試信息
-fverbose-asm:在編譯成彙編語言時,把C變量的名稱作爲彙編語言中的註釋
-save-temps:自動輸出預處理文件、彙編文件、對象文件,編譯正常進行
-fsyntax-only:只測試源文件語法是否正確,不會進行任何編譯操作
-ffreestanding:編譯成獨立程序,而非宿主程序

語言標準

-ansi:ANSI標準
-std=c99:C99標準
-std=gnu89:ISO/IEC 9899:1990 以及GNU擴充
-std=gnu99:ISO/IEC 9899:1999 以及GNU擴充
-trigraphs:支持ISO C三字符組

出錯提示
-w:忽略所有警告

-Werror:不區分警告和錯誤,遇到任何警告都停止編譯
-Wall:開啓大部分警告提示
-Wshadow:某語句塊作用域變量與更大作用域的另一變量同名時發出警告(此警告未包含在-Wall選項中,需單獨開啓)
-Wextra:對所有合法但值得懷疑的表達式發出警告

優化選項

-O0:關閉所有優化選項
-O1:第一級別優化,使用此選項可使可執行文件更小、運行更快,並不會增加太多編譯時間,可以簡寫爲-O
-O2:第二級別優化,採用了幾乎所有的優化技術,使用此選項會延長編譯時間
-O3:第三級別優化,在-O2的基礎上增加了產生inline函數、使用寄存器等優化技術
-Os:此選項類似於-O2,作用是優化所佔用的空間,但不會進行性能優化,常用於生成最終版本

自定義擴展名

-x:使用此選項可以指定自定義的源文件擴展名,類型有c、c-header、cpp-output、assembler、assembler-with-cpp、none
凡-x後面所列的所有文件都會被視爲其指定的類型,要想改變類型可以再一次使用-x選項,或者使用-x none回到默認設置
示例:gcc -o test test.c -x assembler test.asm -x c test2.c

靜態庫的創建和使用

以創建靜態庫static_lib.a爲例
編寫C源文件static_lib.c,其中寫入需要重複調用的函數,然後使用命令gcc -c static_lib.c生成目標文件static_lib.o
使用ar工具創建靜態庫,命令格式:ar rcs static_lib.a static_lib.o
編寫C頭文件static_lib.h,其中寫入這些函數的原型聲明
編寫主函數app.c,引入頭文件static_lib.h,這樣就可以正常使用那些自定義的可複用函數了
使用命令gcc app.c -static ./static_lib.a -o app編譯生成可執行文件app

動態庫的創建和使用

以創建動態庫share_lib.so爲例
編寫C源文件share_lib.c,寫入需要重複調用的函數,然後使用命令gcc -shared -fPIC -o share_lib.so share_lib.c生成動態庫文件share_lib.so
編寫C頭文件share_lib.h,寫入函數的原型聲明
編寫主函數app.c,引入頭文件share_lib.h,然後就可以調用在動態庫中自定義的函數了
使用命令gcc app.c ./share_lib.so -o app編譯生成可執行文件app

gcc編譯編譯選項大全

https://blog.csdn.net/a568478312/article/details/79195218

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章