【问题标题】:macdeployqt seems not work correctlymacdeployqt 似乎无法正常工作
【发布时间】:2017-08-03 15:42:00
【问题描述】:

我目前正在尝试在 MacO 上部署我的 Qt5.8 应用程序。最新的 Travis 工作是 here。在使用macdeployqt 后,我得到了VNote.dmg 文件。然后我将它复制到另一个MacOS并尝试运行它,但出现以下错误:

/Applications/VNote/VNote.app/Contents/MacOS/VNote ; exit;
dyld: Library not loaded: /usr/local/Cellar/qt5/5.8.0_1/lib/QtWebEngineCore.framework/Versions/5/QtWebEngineCore
  Referenced from: /Applications/VNote/VNote.app/Contents/Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets
  Reason: image not found
Trace/BPT trap: 5
logout

然后我使用otool -L /Applications/VNote.app/Contents/MacOS/VNote 得到输出:

/Applications/VNote.app/Contents/MacOS/VNote:
    @executable_path/../Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtWebEngineCore.framework/Versions/5/QtWebEngineCore (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.8.0, current version 5.8.0)
    /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    @executable_path/../Frameworks/QtQml.framework/Versions/5/QtQml (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtWebChannel.framework/Versions/5/QtWebChannel (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtPositioning.framework/Versions/5/QtPositioning (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.8.0, current version 5.8.0)
    @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.8.0, current version 5.8.0)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

然后otool -L /Applications/VNote.app/Contents/Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets 显示:

/Applications/VNote.app/Contents/Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets:
    @executable_path/../Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtWebEngineCore.framework/Versions/5/QtWebEngineCore (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.8.0, current version 5.8.0)
    /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtQml.framework/Versions/5/QtQml (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtNetwork.framework/Versions/5/QtNetwork (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtWebChannel.framework/Versions/5/QtWebChannel (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtPositioning.framework/Versions/5/QtPositioning (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.8.0, current version 5.8.0)
    /usr/local/Cellar/qt5/5.8.0_1/lib/QtQuickWidgets.framework/Versions/5/QtQuickWidgets (compatibility version 5.8.0, current version 5.8.0)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

QtWebEngineWidgets 似乎仍然引用 Travis 环境中的绝对路径。

我应该怎么做才能部署一个 Qt 应用程序?非常感谢!

【问题讨论】:

  • 您声明您正在尝试部署 Qt 5.7 应用程序,但地窖库的引用是指 5.8。您的构建机器上是否有两个版本的 Qt,这让您感到困惑?
  • @TheDarkKnight 很抱歉造成混乱。我使用 Qt5.7 进行本地开发,而 Travis 使用 Qt5.8。它可以构建目标,所以我认为 Qt5.8 可以构建 Qt5.7 应用程序,对吧?
  • 我相信那是你的问题;正在从 5.7 Qt 框架调用 macdeployqt,并希望解析 5.7 库的路径。 5.8的Qt库会被忽略,所以需要把它当成a 3rd party library,使用install_name_tool自己做。更好的解决方案是升级您自己的代码以使用 5.8。
  • @TheDarkKnight 不!我认为 5.7 或 5.8 并不重要。 macdeployqt 不会改变框架的路径。有人发布了修复此问题的工具macdeployqtfix。非常感谢!
  • 不改变路径... - 这就是macdeployqt 的意义所在。它将所需的 Qt 框架复制到应用程序包中并修复路径。在调用macdeployqt之前,路径是指已安装的Qt框架;调用macdeployqt 后,您可以看到它们已被改写为@executable_path/../Frameworks...

标签: macos qt deployment macdeployqt


【解决方案1】:

我认为这是macdeployqt 的错误。它似乎没有解决所有框架的依赖关系。相反,它只是修复了可执行文件的直接依赖关系。

感谢macdeployqtfix,它是一个工具,可以解决macdeployqt 忘记的所有事情。

顺便说一句,如果你的应用使用QWebEngineWidget,你也需要macdeployqt helper QWebEngineProcess bundle。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 2012-05-06
    • 2013-02-17
    • 2017-10-09
    • 2014-05-02
    • 2011-09-11
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多