Libraries

庫文件 (*.so) 如何解決共享依賴關係?

  • September 20, 2019

如果我呼叫以下命令:

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=.

(不要將其設置為該值。)

引用自:https://unix.stackexchange.com/questions/542757