我想學習如何建立和使用動態庫在c + +程序。一切都很好,當我從終端(我在Mac OS X El Capitan上)啓動它時,我的程序運行良好。令人驚訝的是,當我嘗試點擊可執行文件來啓動它時,情況並非如此。我收到一個dyld: Library not loaded: liblibrary.so
,Reason: image not found
錯誤。無法運行程序通過點擊它,而我可以從終端
我的所有文件都在同一個劇目中。我建立他們的命令:
g++ -c -fPIC A.cpp
g++ -c -fPIC B.cpp
g++ -shared -fPIC A.o B.o -o library.so
g++ main.cpp library.so -o Program
感謝的提前對您有所幫助。
我嘗試以下解決方案:
- 添加路徑,無論是在
LD_LIBRARY_PATH
和DYLD_LIBRARY_PATH
- 更改庫extention:
library.so
或library.dylib
- 添加rpath的
g++ main.cpp library.so -Wl,-rpath,. -o Program
和g++ main.cpp library.so -Wl,-rpath,$HOME/my_dir -o Program
從命令行運行時,是否與'library.so'文件位於同一目錄中?這就是爲什麼系統可以找到該庫,因爲它位於*當前目錄*中。如果它不在*當前目錄中,那麼系統需要通過['-rpath'](https://en.wikipedia.org/wiki/Rpath)**鏈接器來查找庫的位置。 * 選項。 –
順便說一下,您的主應用程序不必使用'-fPIC'選項構建,而只需使用庫。 –
是的,我在當前目錄中,但我以前試過'g ++ -Wl,-rpath ,. main.cpp library.so -o程序「鏈接到我的當前目錄,沒有任何改變。 – kipgon