如何在Qt中捆绑Mac应用程序中的dylib

How can I bundle a dylib within a Mac app bundle in Qt?

本文关键字:Mac 应用程序 dylib Qt      更新时间:2023-10-16

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

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

谢谢,艾伦。

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

嗯,当然——用一点shell脚本,一切皆有可能。:)

在你的构建脚本中,在你调用macdeployqt之后,但在你做任何代码签名之前,你会把.dylib文件复制到你的.app文件夹中的Contents/Frameworks中。

之后的技巧是说服可执行文件在它的新位置寻找库,而不是在链接可执行文件时它所在的位置。(如果你执行"otool -L ./MyProgram. exe"命令。app/Contents/MacOS/MyProgram",你会看到程序正在寻找共享库的地方,你会看到它没有在框架文件夹中寻找你的.dylib文件,但是)

使用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"来验证你的满意,可执行文件现在被设置为寻找框架文件夹中的.dylib文件。