【问题标题】:Exclude Frameworks from macdeployqt从 macdeployqt 中排除框架
【发布时间】:2016-03-03 10:49:43
【问题描述】:

在 OSX 上使用 Qt/C++ (QT 5.5),有没有办法排除我在运行 macdeployqt 时不使用的 API 的框架?

例如,我认为我不需要以下框架:

  • QtQml.framework
  • QtQuick.framework
  • QtWebChannel.framework(我正在使用 webkit 和 webkit 桥,所以我假设我不需要 QtWebChannel 框架?)
  • QtMultimedia.framework
  • QtMultimediaWidgets.framework
  • QtSensors.framework
  • QtOpenGL.framework

【问题讨论】:

    标签: c++ macos qt shared-libraries macdeployqt


    【解决方案1】:

    以下是我的建议:尝试手动从应用程序包中删除这些框架,然后运行您的应用程序。这只是在 Finder 中打开应用程序包(或从命令行 cd 进入)并将框架移动到另一个文件夹的问题。

    您可能会对这些框架中有多少是必要的感到惊讶——它们都具有相互依赖关系。解决这个问题的唯一方法是从源代码构建 Qt,并将其配置为只构建所需的模块。

    至于 macdeployqt 本身,它是一个非常通用的工具,不能满足每个应用程序的需求。如果您能够删除任何这些框架,最好的办法是编写一个运行 macdeployqt 的脚本,然后修复输出。 macdeployqt 工具仍然相当新(从 Qt 5.5 开始),因此肯定还有一些错误需要修复和功能需要实现。所以你现在唯一的选择就是解决它的缺陷。

    【讨论】:

    • 我已经试过了。不幸的是,没有它,应用程序将无法运行。我不知道为什么。我根本没有调用单个 QML 或 QtQuick 的东西,但需要附带该框架。
    • 就像我(试图)在答案中解释的那样,框架之间的链接是在构建时建立的,而不是在您运行 macdeployqt 时建立的。因此,如果您不需要 QML,您唯一的选择就是在没有它的情况下构建 Qt。
    • 我发现默认的 QtWebKit.framework 包是罪魁祸首。它包含 QtQuick 和 QtQml 的东西,即使我没有使用它们。唯一的解决方法是获取 QtWebKit 的源代码,在 QtWebKit.framework 中找到 QtQuick 和 QtQML 依赖项,删除它们并重新编译。然后,将该框架包换成这个新的。然后,我可以删除 QtQml.framework 和 QtQuick 框架。长话短说——这是一个巨大的障碍,不值得我花时间。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多