如何在Mac上部署助手与我的应用程序,而无需部署Qt框架的多个副本



我正在尝试在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 放在资源文件夹中。

由于我将应用程序部署在未安装 qt 的系统上,因此我将所有 QT 依赖项放在内容/框架中,并运行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 可执行文件旁边)

由于我想我将框架的 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 必须与路径匹配...但是对于库的单个实例,它就是不能...

我还尝试在 Assistant 将要查找的位置与 Qt 库建立符号链接(别名?它尝试并失败了,抱怨文件格式不正确。

更新回答评论:

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

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

而且助手找不到真正在

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

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

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

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

而且相当重要的是,需要获得助手所需的sqldrivers插件。 而且... 那是一个艰难的过程...在框架上设置插件的依赖项。

如果助手在自己的捆绑包中(在资源内部)中会很棒......但是由于Qt库依赖项仍在主捆绑包的资源中,以避免多次复制相同的库。我做不到。将Qt框架放在捆绑包之外不是一种选择,因为我不能依靠用户不删除项目或安装其他版本。

最新更新