c++ - 无法通过单击程序来运行程序,而我可以从终端运行程序

标签 c++ macos dynamic lib

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

最佳答案

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

(我已经没有MacOSX了,所以我忘记了细节)

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

相关文章:

c++ - Linux 中的 OpenCv VideoCapture 错误 - 不支持设置属性 #0

c++ - C++中链表的读取访问冲突

c++ - 哪个有更好的内存访问? (C++)

macos - 无法向 NSSegmentedControl 添加更多元素

java - 在 Mac 上添加 javax.comm API

java - JDK 9 + Mac OS + jlink?

python - gstreamer 动态管道文件接收器添加,出现未协商错误

html - 为什么 jQuery.live 函数不能用于静态元素?

c# - WPF 中基于动态百分比的宽度

c++ - _fu2___ZSt4cout 在我的 C++ 代码中占用了 21.49% 的运行时间