c++ - 如何在 Qt 的 Mac 应用程序包中 bundle dylib?

标签 c++ macos qt bundle dylib

我有一个应用程序和一个它链接的 dylib。据我了解,应用程序包应包含 dylib。对吗?

有没有办法在构建时将 dylib 复制到应用程序包中?

谢谢, 艾伦

最佳答案

Is there a way to copy the dylib to the application bundle when built?

好吧,当然 - 使用一点 shell 脚本,一切皆有可能。 :)

在您的构建脚本中,在您调用 macdeployqt 之后,但在您完成任何代码签名之前,您需要将 .dylib 文件复制到您的 .app 文件夹内的 Contents/Frameworks 中。

之后的技巧是说服可执行文件在其新位置而不是链接可执行文件时它所在的位置查找库。 (如果你执行“otool -L ./MyProgram.app/Contents/MacOS/MyProgram”你会看到程序正在寻找共享库的地方,你会看到它不是在寻找你的.dylib文件Frameworks 文件夹)

为此,您可以使用 install_name_tool 命令,例如:

install_name_tool -change /the/old/path/to/the_library_name.dylib  "@executable_path/../Frameworks/the_library_name.dylib" ./MyProgram.app/Contents/MacOS/MyProgram

完成此操作后,您可以再次对可执行文件运行“otool -L”,以确认可执行文件现在已设置为在 Frameworks 文件夹中查找 .dylib 文件并令您满意。

关于c++ - 如何在 Qt 的 Mac 应用程序包中 bundle dylib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333628/

相关文章:

macos - 如何将 NSApplicationPresentationOptions 应用于应用程序?

c++ - 有一个小部件声明顺序要遵循吗?

c++ - 如何在 Qt5 中设置线程的 CPU 亲和性?

c++ - Qt中连接不同类的信号槽

c++ - 在 x86 机器上移动超过 32 位的 uint64_t 整数未定义行为?

macos - 确保窗口在 OS X Cocoa 上显示在屏幕上

c++ - 如何在 OpenCv 中使用变换矩阵变换图像?

macos - 在 Mac OS Catalina 上安装 Pentaho Data Integration(PDI、Kettle)时出错

c++ - 如何在 C++ 中使用 strcpy

c++ - C++ 中的字符串溢出?这种持续不断的哔哔声很奇怪