Libraries
庫文件 (*.so) 如何解決共享依賴關係?
如果我呼叫以下命令:
ldd mylib.so
然後,這會產生以下內容:
libopencv_features2d.so.4.1 => /usr/local/lib/libopencv_features2d.so.4.1 (0x00007f83dee6b000)
如果我複製
/usr/local/lib/libopencv_features2d.so.4.1
到我目前的工作目錄中,我會期望 ldd 顯示=> ./libopencv_features2d.so.4.1 (0x00007f83dee6b000)
相反,它仍然將其解析為
/usr/local/lib
. 這是為什麼?以及如何解決這樣的系統依賴關係?還有一種方法可以影響解決依賴關係的方式嗎?我可以強制它解析到我的本地目錄嗎?
動態連結器在各種地方尋找庫,但預設情況下不包括目前目錄。在 Linux 上,列表是
- 二進製文件 rpath 中定義的路徑(如果有);
- 中列出的路徑
LD_LIBRARY_PATH
(如果有);- 二進製文件執行路徑中定義的路徑(如果有);
- 已知的圖書館
/etc/ld.so.cache
;- 系統的庫路徑(
/usr/lib
等)。上面的連結提供了更多詳細資訊。
您可以通過導出來影響依賴關係的解決方式
LD_LIBRARY_PATH
;特別是在您的情況下:export LD_LIBRARY_PATH=.
(不要將其設置為該值。)