Linux系统程序运行时加载动态库路径顺序
程序運(yùn)行時(shí)加載動態(tài)庫路徑順序(Linux)
在linux系統(tǒng)中,如果程序需要加載動態(tài)庫,它會按照一定的順序(優(yōu)先級)去查找:
鏈接時(shí)路徑(Link-time path)和運(yùn)行時(shí)路徑(Run-time path)不是一回事,當(dāng)然,當(dāng)你知道這個(gè)概念的時(shí)候,你當(dāng)然明白。
那么自制的庫在沒有指定運(yùn)行時(shí)庫的路徑時(shí),一般是不會找到你特定目錄的,先來說說鏈接庫的搜尋順尋:
1.編譯目標(biāo)代碼時(shí)指定的動態(tài)庫搜索路徑(指的是用-wl,rpath或-R選項(xiàng)而不是-L);example: gcc -Wl,-rpath,/home/arc/test,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib test.c2.環(huán)境變量LD_LIBRARY_PATH指定的動態(tài)庫搜索路徑;(export LD_LIBRARY_PATH=/root/test/env/lib)3.配置文件/etc/ld.so.conf中指定的動態(tài)庫搜索路徑;(更改/etc/ld.so.conf文件后記得一定要執(zhí)行命令:ldconfig!該命令會將/etc/ld.so.conf文件中所有路徑下的庫載入內(nèi)存中)4.默認(rèn)的動態(tài)庫搜索路徑/lib;5.默認(rèn)的動態(tài)庫搜索路徑/usr/lib。
在命令前加環(huán)境變量設(shè)置,該環(huán)境變量只對該命令有效,當(dāng)該命令執(zhí)行完成后,該環(huán)境變量就無效了。如下述命令:# LD_LIBRARY_PATH=/root/test/env/lib ./pos
下面對編譯時(shí)庫的查找與運(yùn)行時(shí)庫的查找做一個(gè)簡單的比較:
1. 編譯時(shí)查找的是靜態(tài)庫或動態(tài)庫,而運(yùn)行時(shí),查找的只是動態(tài)庫。2. 編譯時(shí)可以用-L指定查找路徑,或者用環(huán)境變量LIBRARY_PATH,而運(yùn)行時(shí)可以用-Wl,rpath或-R選項(xiàng),或者修改/etc/ld.so.conf文件或者設(shè)置環(huán)境變量LD_LIBRARY_PATH.3. 編譯時(shí)用的鏈接器是ld,而運(yùn)行時(shí)用的鏈接器是/lib/ld-linux.so.2.4. 編譯時(shí)與運(yùn)行時(shí)都會查找默認(rèn)路徑:/lib /usr/lib5. 編譯時(shí)還有一個(gè)默認(rèn)路徑:/usr/local/lib,而運(yùn)行時(shí)不會默認(rèn)找查該路徑。
環(huán)境變量LIBRARY_PATH可以指定編譯時(shí)搜索動態(tài)庫的路徑;
環(huán)境變量LD_LIBRARY_PATH可以指定程序運(yùn)行時(shí)動態(tài)庫搜索和加載的路徑;
cmake . -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_SYSTEM_NAME=Linux
根據(jù)cmake官方關(guān)于交叉編譯的介紹: 《Cross Compiling for Linux》,CMAKE_SYSTEM_NAME和CMAKE_SYSTEM_PROCESSOR是交叉編譯的時(shí)候必須指定的兩個(gè)參數(shù)。
所以如果在cmake命令行定義了CMAKE_SYSTEM_NAME,就必須也定義CMAKE_SYSTEM_PROCESSOR,如下。
cmake . -G "Eclipse CDT4 - Unix Makefiles" \-DCMAKE_SYSTEM_NAME=Linux \-DCMAKE_SYSTEM_PROCESSOR=x86_64
如果在命令行只是定義了CMAKE_SYSTEM_NAME,就會出現(xiàn)CMAKE_SYSTEM_PROCESSOR為空這種奇怪的問題。
另外經(jīng)測試如果在CMakeLists.txt腳本中用set命令設(shè)置CMAKE_SYSTEM_NAME的值,并不會影響CMAKE_SYSTEM_PROCESSOR的值:
set(CMAKE_SYSTEM_NAME Linux)
總結(jié)
以上是生活随笔為你收集整理的Linux系统程序运行时加载动态库路径顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个带雨字的qq网名。
- 下一篇: 求人来人往歌词