如何在Mac上部署使用我的应用程序的助手而不部署多个Qt框架副本?

时间:2014-11-17 17:52:15

标签: macos qt deployment assistant help-viewer

我正在尝试在Mac上部署使用助手显示帮助的Qt应用程序(OS X 10.6-10.9,Qt 4.8)

QStringList args = "-collectionFile " + "my_help_file";
QString app = "path/"+"Assistant.app";
m_helpProcess->start(app, args);

我将Assistant.app放在Resources文件夹中。

由于我在没有安装qt的系统上部署应用程序,因此我将所有QT依赖项放在Contents / Frameworks中,并运行install_name_tool

# for QtCore:
install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Version/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/MacOs/xxx

install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Resources/Assistant.app/Contents/MacOS/Assistant

应用程序获取它,它是功能的,但助手不...显然它是一个不同的级别。

我不想放置框架的多个副本......此外我确信如果我这样做会有冲突......

没有捆绑的调用助手无法正常工作......(我希望将可执行文件放在xxx可执行文件旁边)

因为我想我将Frameworks的id设置为@executable_path下的一个目录,所以我无法告诉其他地方的帮助......

如何正确地将智能助理与框架链接?

注意:我试过了:

# for QtCore:
install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Version/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/MacOs/xxx

install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore xxx.app/Contents/Resources/Assistant.app/Contents/MacOS/Assistant

没有找到库...我想id必须匹配路径...但是对于lib的单个实例,它只是不能......

我还尝试在Qt库中创建符号链接(别名?),在助理看起来的位置......它尝试失败,抱怨格式错误的文件。

更新回复评论:

在Resources文件夹的Assistant包中的助手上运行otool -L:

@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore

助理找不到真正位于

的图书馆
@executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore 

1 个答案:

答案 0 :(得分:0)

出乎意料的是,即使从QT Creator外部也能正确打开助手。一旦我同时给了助手和资源文件绝对路径。 (我可以为助手可执行文件或整个软件包完成此操作)

我将可执行助手复制到与应用程序可执行文件相同的文件夹中。

当然,需要添加依赖库并将链接路径设置为@executable_path /../ Frameworks,就像部署任何应用程序一样。 (我只是手动完成,而不是使用macdeployqt,因为macdeployqt无法复制插件)

非常重要的是,需要获得助手所需的sqldrivers插件。并且...这是一个艰难的...也在框架上设置插件的依赖关系。

将Assistant放在自己的bundle(在Resources内部)中会很棒......但是Qt库依赖关系仍然在主bundle的资源中,以避免多次复制相同的库。我无法做到这一点。将Qt框架放在捆绑包之外不是一种选择,因为我不能依赖用户不要删除项目或安装其他版本。