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

          主站蜘蛛池模板: 黄龙县| 柳州市| 康马县| 黄大仙区| 嘉峪关市| 长乐市| 曲阳县| 佛冈县| 银川市| 丹阳市| 闽清县| 嘉鱼县| 保康县| 莆田市| 监利县| 湖北省| 鹤峰县| 北安市| 城市| 祥云县| 凤庆县| 南平市| 新巴尔虎右旗| 霍山县| 三原县| 淮安市| 和硕县| 南澳县| 长子县| 峨眉山市| 永安市| 紫金县| 永宁县| 开鲁县| 崇州市| 盈江县| 都兰县| 永济市| 桃园县| 军事| 图片|