我有一个应用程序项目,该项目依赖于我自己创建的几个共享库。根据Qt 4.6文档“在Mac OSX上部署应用程序”:


注意:如果您需要第三方库
包含在您的应用程序中
捆绑包,那么您必须添加附件
该库的lib条目到您的
应用程序的.pro文件。除此以外,
macdeployqt工具不会复制
第三方.dylib进入捆绑包。


我已将lib条目添加到应用程序的.pro文件中,但是执行macdeployqt时,我编写的库不会复制到捆绑软件中。我的.pro文件中包含以下内容:

LIBS += -L../Libraries -lMyLib


一切正常,只是当我尝试从遇到问题(即“找不到图片”)的捆绑包中运行时。

macdeployqt中是否有错误,或者我的.pro文件是否还需要更多内容?

最佳答案

badcat是正确的,因为Qt 4.6文档对使用macdeployqt工具可能发生的情况大加夸张了。

以我的经验,macdeployqt唯一要做的事情是:


将Qt库复制到foo.app/Contents/Frameworks/目录中的应用程序捆绑包中
调整一个二进制文件的链接库,即foo.app/Contents/MacOS/foo(即使在Info.plist中提到了另一个二进制文件,也必须与应用程序捆绑包具有相同的名称)


因此,对于要在应用程序捆绑包中部署的所有其他二进制文件和库,必须执行以下操作:


运行macdeployqt享受其有用但微不足道的好处

macdeployqt <path_to_your_nascent_app_bundle>/foo.app
手动安装额外的库

cp <original_library_path> foo.app/Contents/Frameworks/<lib_name>
找出每个二进制链接都指向哪些库。

otool -L <binary_file_name>
更改二进制文件中的内部库路径

install_name_tool -change <original_library_path> @executable_path/../Frameworks/<lib_name> <binary_file_name>


我编写了一个Perl脚本,该脚本可以为我的应用程序自动执行这些步骤,但是它对于我的特定环境而言太具体了,无法在此处发布。

关于qt - macdeployqt和第三方库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2809930/

10-13 05:24