gcc ------ 編譯與鏈接選項及CFLAGS、LDFLAGS、LIBS


GCC手冊:https://gcc.gnu.org/onlinedocs/

GCC編譯選項CFLAGS參數

選項 說明
-c 用於把源碼文件編譯成 .o 對象文件,不進行鏈接,所以不產生可執行文件
-o 用於連接生成可執行文件,在其后可以指定輸出文件的名稱
-g 用於在生成的目標文件中,添加調試信息,可以使用GDB進行調試
-Idir 用於把新目錄添加到include路徑上,可以使用相對和絕對路徑,“-I.”、“-I./include”、“-I/opt/include”
-Wall 生成常見的所有告警信息,且停止編譯,具體是哪些告警信息,請參見GCC手冊,一般用這個足矣!
-w 關閉所有告警信息
-O 表示編譯優化選項,其后可跟優化等級0\1\2\3,默認是0,不優化
-fPIC 用於生成位置無關的代碼
-v (在標准錯誤)顯示執行編譯階段的命令,同時顯示編譯器驅動程序,預處理器,編譯器的版本號
-D XXX 添加宏定義,對程序進行條件編譯
-fmessage-length=n Try to format error messages so that they fit on lines of about n characters. If n is zero, then no line-wrapping is done; each error message appears on a single line. This is the default for all front ends.

 


GCC鏈接選項LDFLAGS參數

選項 說明
-lxxx -l后面緊接着庫名,鏈接時在標准搜索目錄中尋找庫文件,搜索名為libxxx.a 或 libxxx.so
-Ldir 用於把新目錄添加到庫搜索路徑上,可以使用相對和絕對路徑,“-L.”、“-L./include”、“-L/opt/include”
gcc -Wl,option 把選項 option 傳遞給連接器,如果 option 中含有逗號,就在逗號處分割成多個選項
-static 使用靜態庫鏈接生成目標文件,避免使用共享庫,生成目標文件會比使用動態鏈接庫大
-s 從可執行文件中刪除符號表和重定位信息,不能再用GDB調試可執行文件

LIBS

LDFLAGS是選項,LIBS是要鏈接的庫。LDFLAGS告訴鏈接器從哪里尋找庫文件,LIBS告訴鏈接器要鏈接哪些庫文件。

例子如下:

  LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib

  LIBS = -lmysqlclient -liconv

 

LDFLAGS指定-L雖然能讓鏈接器找到庫進行鏈接,但是運行時鏈接器卻找不到這個庫,如果要讓軟件運行時庫文件的路徑也得到擴展,那么我們需要增加這兩個庫給"-Wl,R"

  LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

如果在執行./configure以前設置環境變量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib" ,注意設置環境變量等號兩邊不可以有空格,而且要加上引號哦(shell的用法)。那么執行configure以后,Makefile將會設置這個選項, 鏈接時會有這個參數,編譯出來的可執行程序的庫文件搜索路徑就得到擴展了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM