【发布时间】:2018-03-07 22:35:51
【问题描述】:
编辑:使用 Qt 5.9.1,与 Homebrew 一起安装
根据other question 中的评论,我们正在尝试使用macdeployqt 来准备基于 Qt 的应用程序的 OSX 捆绑包的分发。
这个工具正确地复制了包内的所有 Qt 依赖项(甚至是一些非 Qt 库)。它还会更改应用程序本身和复制的库中的依赖库名称。
它还成功复制了QtWebEngineCore.framework的Helpers文件夹中的QtWebEngineProcess.app。
问题
一个问题是它没有改变依赖库的名称inside QtWebEngineProcess,所以bundle是不可重定位的(如QtWebEngineProcess所指其依赖库的绝对路径仅在开发机器上有效)。 尝试在“客户端”机器上运行该应用程序,会出现错误:
dyld:库未加载: /usr/local/Cellar/qt/5.9.1/lib/QtWebEngineCore.framework/Versions/5/QtWebEngineCore 引用自:Business.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
我们尝试手动修复此应用程序,方法是编辑 QtWebEngineProcess 以将 Qt 库路径的绝对部分替换为 @loader_path/../../../../../../../../Frameworks/。
这只会将问题向前推进:现在 QtWebEngineProcess 似乎可以正确加载其依赖库,但依赖库本身无法再加载其依赖库,因为它们的安装名称以 @ 开头executable_path 和 QtWebEngineProcess 可执行文件位于与 Business 可执行文件不同的文件夹中。因此错误:
dyld:库未加载: @executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick
引用自:Business.app/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/QtWebEngineCore
macdeployqt 在涉及使用 Qt 的 Web 引擎的应用程序时是否损坏?
有没有办法让它工作而无需手动重新更改捆绑包中的所有 Qt 安装名称?
【问题讨论】:
-
不确定它对您的情况也有帮助,但对于使用
QtWebEngine的应用程序,我首先运行macdeployqt,然后使用选项-add rpath @executable_path/../Frameworks <absolute path to app install dir>/MyApp.app/Contents/MacOS/MyApp运行install_name_tool,其中MyApp.app是名称应用程序包的名称,MyApp是应用程序二进制文件的名称。 -
@Dmitry 遗憾的是,正如我们在第二个错误中看到的,Qt 库包含以
@executable_path开头的依赖Qt 库的安装名称,而不是@rpath(这是由macdeployqt完成的) )。所以我想填充应用程序的 rpath 应该不会有什么不同。 -
我可以看到您使用通过 Homebrew 安装的 Qt。你试过用官方的Qt安装包代替吗?
-
@Dmitry 这是一个有趣的建议。我暂时找到了一些讨厌的解决方法,但是官方 Qt 安装是一个需要调查的轨道,谢谢!
-
@AdN 您能否分享您的解决方法作为答案?我遇到了同样的问题。
标签: c++ macos qt qtwebengine macdeployqt