2014-06-29 39 views
0

我的項目包含一個庫和示例項目以瞭解如何使用它。我將庫放在「bin」文件夾以及所有可執行示例中。我可以運行在機器上的示例項目,他們被編譯,但是當我嘗試到另一臺機器上運行它們,我得到:我的磁帶庫不在其他系統上加載,但在編譯的系統上正常工作

./example:錯誤而載入共享庫:libMyLib.so:不能 開放共享目標文件:沒有這樣的文件或目錄

這是沒有意義的,因爲庫是在同一個文件夾。是什麼導致它忽略其他機器上的庫?

回答

1

僅僅因爲庫與可執行文件在同一目錄中並不意味着它會在那裏尋找它。默認情況下在linux上,可執行文件只會查看一組有限的目錄,由ldconfig和LD_LIBRARY_PATH環境變量設置。

一個竅門,這是非常有用的是你的程序有額外的鏈接選項

-Wl,-rpath,'$ORIGIN' 

這將導致可執行程序,也期待在目錄中的可執行文件是在共享對象鏈接。

通常可以通過添加到您的Makefile設置此:

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

注雙$這裏 - 讓將其解釋爲,其擴展到剛剛$

一個make變量
0

當前目錄不一定是動態鏈接程序查找動態庫的地方。可執行文件較少的目錄。

您可能想檢查ldconfig以查看它們的位置。

相關問題