gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS
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將會設置這個選項, 鏈接時會有這個參數,編譯出來的可執行程序的庫文件搜索路徑就得到擴展了。
總結
以上是生活随笔為你收集整理的gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置电脑默认程序(针对免安装绿色版程序)
- 下一篇: Swift获取当前网络状态Wifi/5G