我正在尝试学习如何在c++程序中构建和使用动态库。从终端启动时,一切都很好,并且程序运行良好(我在Mac OS X El Capitan上)。令人惊讶的是,当我尝试通过单击可执行文件来启动它时,情况并非如此。我收到dyld: Library not loaded: liblibrary.soReason: 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_PATHDYLD_LIBRARY_PATH中添加PATH
  • 更改库扩展:library.solibrary.dylib
  • 添加一个rpath g++ main.cpp library.so -Wl,-rpath,. -o Programg++ main.cpp library.so -Wl,-rpath,$HOME/my_dir -o Program
  • 最佳答案

    您可能需要在编译时(例如使用g++ -Wall -Wl,-rpath,$HOME/yourdir main.cpp library.so -o Program)给出一个明确的rpath(作为绝对路径,而不是相对路径),或者设置一些DYLD_LIBRARY_PATH,请参见this。您可能需要一个.dylib后缀,而不是一个.so后缀。

    (我不再有任何MacOSX,所以我忘记了细节)

    关于c++ - 我可以从终端上单击时无法运行程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46426136/

    10-12 20:34