void

          makefile的選項CFLAGS、CPPFLAGS、LDFLAGS和LIBS的區別

          LDFLAGS是選項,LIBS是要鏈接的庫。都是喂給ld的,只不過一個是告訴ld怎么吃,一個是告訴ld要吃什么。

          網上不難搜索到上面這段話。不過“告訴ld怎么吃”是什么意思呢?

          看看如下選項:

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

          LIBS = -lmysqlclient -liconv

          這就明白了。LDFLAGS告訴鏈接器從哪里尋找庫文件,LIBS告訴鏈接器要鏈接哪些庫文件。不過使用時鏈接階段這兩個參數都會加上,所以你即使將這兩個的值互換,也沒有問題。


          說到這里,進一步說說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將會設置這個選項, 鏈接時會有這個參數,編譯出來的可執行程序的庫文件搜索路徑就得到擴展了。


          ------------------------------------------------------------------------------------------------------------------------


          PS:-Wl,R在GraphicsMagick環境下,用為-R, 也就是LDFLAGS = -L/var/xxx/lib -R/var/xxx/lib



           

          CFLAGS 或 CPPFLAGS的用法
          CPPFLAGS='-I/usr/local/libjpeg/include -I/usr/local/libpng/include'

           

          posted on 2012-05-07 22:46 void 閱讀(24759) 評論(0)  編輯  收藏 所屬分類: Linux

          主站蜘蛛池模板: 夏邑县| 马边| 长寿区| 兴海县| 绩溪县| 辰溪县| 平阳县| 遂溪县| 东丰县| 太康县| 老河口市| 营山县| 西畴县| 旬邑县| 平罗县| 衢州市| 衡东县| 宁乡县| 通河县| 长治市| 门头沟区| 延川县| 衡东县| 慈溪市| 长治县| 古浪县| 东莞市| 股票| 巴南区| 阿拉善盟| 疏附县| 启东市| 雷山县| 洪洞县| 晴隆县| 泾源县| 景东| 赤峰市| 集安市| 和林格尔县| 巴青县|