我正在尝试在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
答案 0 :(得分:0)
出乎意料的是,即使从QT Creator外部也能正确打开助手。一旦我同时给了助手和资源文件绝对路径。 (我可以为助手可执行文件或整个软件包完成此操作)
我将可执行助手复制到与应用程序可执行文件相同的文件夹中。
当然,需要添加依赖库并将链接路径设置为@executable_path /../ Frameworks,就像部署任何应用程序一样。 (我只是手动完成,而不是使用macdeployqt,因为macdeployqt无法复制插件)
非常重要的是,需要获得助手所需的sqldrivers插件。并且...这是一个艰难的...也在框架上设置插件的依赖关系。
将Assistant放在自己的bundle(在Resources内部)中会很棒......但是Qt库依赖关系仍然在主bundle的资源中,以避免多次复制相同的库。我无法做到这一点。将Qt框架放在捆绑包之外不是一种选择,因为我不能依赖用户不要删除项目或安装其他版本。