gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS
gcc ------ 編譯與鏈接選項(xiàng)及CFLAGS、LDFLAGS、LIBS
GCC手冊(cè):https://gcc.gnu.org/onlinedocs/
GCC編譯選項(xiàng)CFLAGS參數(shù)
選項(xiàng) 說明
-c 用于把源碼文件編譯成 .o 對(duì)象文件,不進(jìn)行鏈接,所以不產(chǎn)生可執(zhí)行文件
-o 用于連接生成可執(zhí)行文件,在其后可以指定輸出文件的名稱
-g 用于在生成的目標(biāo)文件中,添加調(diào)試信息,可以使用GDB進(jìn)行調(diào)試
-Idir 用于把新目錄添加到include路徑上,可以使用相對(duì)和絕對(duì)路徑,“-I.”、“-I./include”、“-I/opt/include”
-Wall 生成常見的所有告警信息,且停止編譯,具體是哪些告警信息,請(qǐng)參見GCC手冊(cè),一般用這個(gè)足矣!
-w 關(guān)閉所有告警信息
-O 表示編譯優(yōu)化選項(xiàng),其后可跟優(yōu)化等級(jí)0\1\2\3,默認(rèn)是0,不優(yōu)化
-fPIC 用于生成位置無關(guān)的代碼
-v (在標(biāo)準(zhǔn)錯(cuò)誤)顯示執(zhí)行編譯階段的命令,同時(shí)顯示編譯器驅(qū)動(dòng)程序,預(yù)處理器,編譯器的版本號(hào)
-D XXX 添加宏定義,對(duì)程序進(jìn)行條件編譯
-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鏈接選項(xiàng)LDFLAGS參數(shù)
選項(xiàng) 說明
-lxxx -l后面緊接著庫名,鏈接時(shí)在標(biāo)準(zhǔn)搜索目錄中尋找?guī)煳募?#xff0c;搜索名為libxxx.a 或 libxxx.so
-Ldir 用于把新目錄添加到庫搜索路徑上,可以使用相對(duì)和絕對(duì)路徑,“-L.”、“-L./include”、“-L/opt/include”
gcc -Wl,option 把選項(xiàng) option 傳遞給連接器,如果 option 中含有逗號(hào),就在逗號(hào)處分割成多個(gè)選項(xiàng)
-static 使用靜態(tài)庫鏈接生成目標(biāo)文件,避免使用共享庫,生成目標(biāo)文件會(huì)比使用動(dòng)態(tài)鏈接庫大
-s 從可執(zhí)行文件中刪除符號(hào)表和重定位信息,不能再用GDB調(diào)試可執(zhí)行文件
LIBS
LDFLAGS是選項(xiàng),LIBS是要鏈接的庫。LDFLAGS告訴鏈接器從哪里尋找?guī)煳募?#xff0c;LIBS告訴鏈接器要鏈接哪些庫文件。
例子如下:
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib
LIBS = -lmysqlclient -liconv
LDFLAGS指定-L雖然能讓鏈接器找到庫進(jìn)行鏈接,但是運(yùn)行時(shí)鏈接器卻找不到這個(gè)庫,如果要讓軟件運(yùn)行時(shí)庫文件的路徑也得到擴(kuò)展,那么我們需要增加這兩個(gè)庫給"-Wl,R"
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
如果在執(zhí)行./configure以前設(shè)置環(huán)境變量export LDFLAGS=“-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib” ,注意設(shè)置環(huán)境變量等號(hào)兩邊不可以有空格,而且要加上引號(hào)哦(shell的用法)。那么執(zhí)行configure以后,Makefile將會(huì)設(shè)置這個(gè)選項(xiàng), 鏈接時(shí)會(huì)有這個(gè)參數(shù),編譯出來的可執(zhí)行程序的庫文件搜索路徑就得到擴(kuò)展了。
總結(jié)
以上是生活随笔為你收集整理的gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置电脑默认程序(针对免安装绿色版程序)
- 下一篇: Swift获取当前网络状态Wifi/5G