Linux下的库文件搜索路径
??? 對于以壓縮包發布的軟件,在它的目錄下通常都有一個配置腳本configure,它的作用確定編譯參數(比如頭文件位置、連接庫位置等),然后生成Makefile以編譯程序。可以進入該軟件的目錄,執行"./configure --help"命令查看使用幫。
一個程序能正確編譯、鏈接、運行需要滿足3個條件:預處理時能找到頭文件,連接時能找到庫(靜態庫或動態庫),運行時能找到庫。下面介紹庫文件的搜索路徑 :
編譯的時候:
gcc最先搜索-L參數指定的路徑--->gcc的環境變量LIBRARY_PATH設置的路徑--->內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程序內的
1.“-L”指定連接時庫的搜索路徑,這些庫使用"-l"來顯示指定,比如"-labc"表示的庫文件為libabc.so
2."-rpath-link"比"-L"多一項功能,它指定的目錄還可以用于搜索依賴庫。
3."-rpath"比"-rpath-link"多一項功能,它指定的目錄會被編譯進程序中,當程序運行時,首先從這些目錄中尋找庫。
怎樣指定"-rpath-link"呢?連接器arm-linux-ld通常是由arm-linux-gcc間接啟動的,而arm-linux-gcc并不認識"-rpath-link"選項,所以需要在前面加上關鍵字"-Wl",表示選項用于連接器。在執行配置命令configure之前設置LDFLAGS即可,比如:
export LDFLAGS="-Wl,-rpath-link-Wl,/work/crossbuild/X/lib -Wl,-rpath-link-Wl,/work/corssbuild/GTK/lib"
./configure
運行的時候(搜索動態鏈接庫):
路徑一:編譯時使用"-rpath"指定目錄。?
路徑二:在配置文件/etc/ld.so.conf中指定動態庫搜索路徑?
路徑三:通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑(當通過該環境變量指定多個動態庫搜索路徑時,路徑之間用冒號":"分隔)
路徑四:在編譯目標代碼時指定該程序的動態庫搜索路徑(編譯時,通過gcc 的參數"-Wl,-rpath,"當指定多個動態庫搜索路徑時,路徑之間用冒號":"分隔)
路徑五:默認的動態庫搜索路徑
轉載于:https://www.cnblogs.com/linuxbo/p/4301750.html
總結
以上是生活随笔為你收集整理的Linux下的库文件搜索路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙耳机测试软件apk_蓝牙耳机弹窗ap
- 下一篇: 单片机原理概念