![](/img/trans.png)
[英]Why does my file/dir manipulation works fine on Windows but not on Linux?
[英]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.