Macos 如何在Mac上部署带有应用程序的Assistant,而不部署Qt框架的多个副本?
我试图在mac(OS X 10.6-10.9,Qt 4.8)上部署一个使用助手显示帮助的Qt应用程序 我将Assistant.app放在Resources文件夹中 由于我在没有安装qt的系统上部署应用程序,所以我将所有qt依赖项放在内容/框架中,并运行install_name_工具Macos 如何在Mac上部署带有应用程序的Assistant,而不部署Qt框架的多个副本?,macos,qt,deployment,assistant,help-viewer,Macos,Qt,Deployment,Assistant,Help Viewer,我试图在mac(OS X 10.6-10.9,Qt 4.8)上部署一个使用助手显示帮助的Qt应用程序 我将Assistant.app放在Resources文件夹中 由于我在没有安装qt的系统上部署应用程序,所以我将所有qt依赖项放在内容/框架中,并运行install_name_工具 # for QtCore: install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Version/QtCore.framework
# 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可执行文件旁边)
因为我想我把框架的id设置为@executable_path下的一个目录,所以我不能告诉help去别处看看
如何将助手与框架正确链接
注意:我尝试过:
# 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库的符号链接(别名?)。。。它尝试了,但失败了,抱怨文件格式不正确
更新以回答评论:
在资源文件夹中的助手捆绑包中的助手上运行otool-L:
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore
助理找不到真正在图书馆的图书馆
@executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore
出乎意料的是,助手甚至从QT Creator外部也正确打开了。。有一次,我给出了助手和资源文件的绝对路径。(对于助手可执行文件或整个捆绑包,我都可以这样做) 我将可执行助手复制到与我的应用程序可执行文件相同的文件夹中 当然,添加依赖库并将链接路径设置为@executable_path/./框架是必需的,就像部署任何应用程序一样。(我只是手动操作,没有使用macdeployqt,因为macdeployqt无法复制插件) 非常重要的是,需要获得Assistant所需的sqldrivers插件。而且。。。那是一个艰难的时刻。。。在框架上设置插件的依赖项
如果助手有自己的包(内部资源),那就太好了。。。但由于Qt库依赖项仍在主捆绑包的资源中,因此避免多次复制相同的库。我不能那样做。将Qt框架放在捆绑包之外不是一个选项,因为我不能依赖用户不删除项目或安装其他版本。框架ID仅在链接时使用。动态加载程序不关心加载时它是什么。您的第二组
install\u name\u工具
命令应该已经起作用了。您是否链接了-headerpad\u max\u install\u name
?如果没有,可能是因为没有足够的空间在加载程序命令中存储新路径。在第二组命令之后,应用于Assistant.app可执行文件的otool-L
显示了什么?@Kenthomass很抱歉回复太晚,只是现在我试图更改它,因为我需要将Assistant称为app是有原因的。。。所以我用你的问题的答案更新了这个问题。我不知道我会把“-headerpad\u max\u install\u names”链接选项放在哪里,这是qmake选项吗?如果“-headerpad\u max\u install\u names”是qmake选项,那么我不能使用它,因为我没有构建助手应用程序,它附带Qt。。。
@executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore