簡體   English   中英

我的庫未在其他系統上加載,但在其上編譯的系統上運行良好

[英]My library does not load on other systems but works fine on the system it was compiled on

我的項目包括一個庫和有關如何使用它的示例項目。 我將庫與所有可執行示例一起放在“ bin”文件夾中。 我可以在示例項目的編譯機器上運行示例項目,但是當我嘗試在另一台計算機上運行它們時,我得到:

./example:加載共享庫時出錯:libMyLib.so:無法打開共享庫文件:沒有這樣的文件或目錄

因為庫位於同一文件夾中,所以這沒有任何意義。 是什么導致它忽略其他計算機上的庫?

僅僅因為該庫與可執行文件位於同一目錄中,並不意味着它將在該目錄中尋找它。 在Linux上,默認情況下,可執行文件將僅查看由ldconfig和LD_LIBRARY_PATH環境變量設置的一組有限目錄。

一個非常有用的技巧是使用額外的鏈接器選項鏈接程序

-Wl,-rpath,'$ORIGIN'

這將導致可執行文件同時在可執行文件所在的目錄中查找共享對象。

通常,可以通過添加到Makefile中來進行設置:

LDFLAGS := -Wl,-rpath,'$$ORIGIN'

注意這里的雙$ -make會將其解釋為make變量,擴展為$

當前目錄不一定是動態鏈接程序將在其中查找動態庫的地方。 可執行文件所在的目錄要少得多。

您可能要檢查ldconfig以查看在哪里尋找它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM