日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux系统程序运行时加载动态库路径顺序

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统程序运行时加载动态库路径顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序運行時加載動態庫路徑順序(Linux)
在linux系統中,如果程序需要加載動態庫,它會按照一定的順序(優先級)去查找:

鏈接時路徑(Link-time path)和運行時路徑(Run-time path)不是一回事,當然,當你知道這個概念的時候,你當然明白。

那么自制的庫在沒有指定運行時庫的路徑時,一般是不會找到你特定目錄的,先來說說鏈接庫的搜尋順尋:

1.編譯目標代碼時指定的動態庫搜索路徑(指的是用-wl,rpath或-R選項而不是-L);example: gcc -Wl,-rpath,/home/arc/test,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib test.c2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;(export LD_LIBRARY_PATH=/root/test/env/lib)3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;(更改/etc/ld.so.conf文件后記得一定要執行命令:ldconfig!該命令會將/etc/ld.so.conf文件中所有路徑下的庫載入內存中)4.默認的動態庫搜索路徑/lib;5.默認的動態庫搜索路徑/usr/lib。

在命令前加環境變量設置,該環境變量只對該命令有效,當該命令執行完成后,該環境變量就無效了。如下述命令:# LD_LIBRARY_PATH=/root/test/env/lib ./pos

下面對編譯時庫的查找與運行時庫的查找做一個簡單的比較:

1. 編譯時查找的是靜態庫或動態庫,而運行時,查找的只是動態庫。2. 編譯時可以用-L指定查找路徑,或者用環境變量LIBRARY_PATH,而運行時可以用-Wl,rpath或-R選項,或者修改/etc/ld.so.conf文件或者設置環境變量LD_LIBRARY_PATH.3. 編譯時用的鏈接器是ld,而運行時用的鏈接器是/lib/ld-linux.so.2.4. 編譯時與運行時都會查找默認路徑:/lib  /usr/lib5. 編譯時還有一個默認路徑:/usr/local/lib,而運行時不會默認找查該路徑。

環境變量LIBRARY_PATH可以指定編譯時搜索動態庫的路徑;
環境變量LD_LIBRARY_PATH可以指定程序運行時動態庫搜索和加載的路徑;

cmake  . -G "Eclipse CDT4 - Unix Makefiles"  -DCMAKE_SYSTEM_NAME=Linux

根據cmake官方關于交叉編譯的介紹: 《Cross Compiling for Linux》,CMAKE_SYSTEM_NAME和CMAKE_SYSTEM_PROCESSOR是交叉編譯的時候必須指定的兩個參數。

所以如果在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,就會出現CMAKE_SYSTEM_PROCESSOR為空這種奇怪的問題。

另外經測試如果在CMakeLists.txt腳本中用set命令設置CMAKE_SYSTEM_NAME的值,并不會影響CMAKE_SYSTEM_PROCESSOR的值:

set(CMAKE_SYSTEM_NAME Linux)

總結

以上是生活随笔為你收集整理的Linux系统程序运行时加载动态库路径顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。