Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在Mac上部署带有应用程序的Assistant,而不部署Qt框架的多个副本?_Macos_Qt_Deployment_Assistant_Help Viewer - Fatal编程技术网

Macos 如何在Mac上部署带有应用程序的Assistant,而不部署Qt框架的多个副本?

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

我试图在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/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