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