我想学习如何建立和使用动态库在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