【发布时间】:2015-01-14 17:21:44
【问题描述】:
我正在尝试在 mac(OS X 10.6-10.9,Qt 4.8)上部署一个使用助手显示帮助的 Qt 应用程序
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 可执行文件旁边)
因为我猜我将框架的 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 库,在助手将查看的位置...它尝试并失败,抱怨文件格式错误。
更新回答评论:
在资源文件夹的助手包中的助手上运行 otool -L:
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore
而助手找不到真正在的图书馆
@executable_path/../../../Frameworks/QtCore.framework/Versions/4/QtCore
【问题讨论】:
-
框架的ID只在链接时使用。动态加载器并不关心加载时它是什么。您的第二组
install_name_tool命令应该有效。你链接到-headerpad_max_install_names了吗?如果不是,可能是没有足够的空间来存储加载器命令中的新路径。在第二组命令之后,otool -L应用于 Assistant.app 的可执行文件会显示什么? -
@KenThomases 抱歉回复晚了,只是现在我才尝试更改它,因为我需要将助手称为应用程序是有原因的...所以我更新了问题并回答了您的问题题。我不知道我会把“-headerpad_max_install_names”链接选项放在哪里,这是一个 qmake 选项吗?
-
如果“-headerpad_max_install_names”是一个 qmake 选项,那么我不能使用它,因为我没有构建 Assistant 应用程序,它带有 Qt...
标签: macos qt deployment assistant help-viewer