3

我正在开发一个基于 Qt 的应用程序,当我在包上使用 macdeployqt 时,Qt 插件不会复制到包中。

但是,如果我第二次运行它,它们就是。此外,“如果应用程序使用 QtSvg 模块,则部署 svg 图标插件。” 未满 - 我的应用程序确实使用了 QtSvg,但未复制 iconengines/* 插件。

我尝试使用 -verbose=3 运行它,最后几行是:

Log: Created configuration file: "silverlock.app/Contents/Resources/qt.conf" 
Log: This file sets the plugin search path to "silverlock.app/Contents/PlugIns" 

从最后一条消息的内容来看,它似乎打算继续运行,但没有 - 几乎就像它崩溃了一样。

为什么会这样?macdeployqt 以前为我工作过,没有问题。

使用:

  • Qt 4.6
  • Qt 创作者 2.0
  • 豹10.5.8
4

1 回答 1

5

问题出在 macdeployqt 源代码中 shared.cpp 的第 355-365 行:

while (frameworks.isEmpty() == false) {
    const FrameworkInfo framework = frameworks.takeFirst();
    copiedFrameworks.append(framework.frameworkName);

    // Get the qt path from one of the Qt frameworks;
    if (deploymenInfo.qtPath.isNull() && framework.frameworkName.contains("Qt") 
        && framework.frameworkDirectory.contains("/lib"))
    {
            deploymenInfo.qtPath = framework.frameworkDirectory;
            deploymenInfo.qtPath.chop(5); // remove "/lib/"
    }

包中第一个名称中包含“Qt”的框架/dylib 名称用于确定插件路径。由于我的包中的第一个框架/dylib 名称是“QtSolutions_QtSingleApplication-2.6”......你明白了。所以我想一个解决方法是将dylib重命名为“qsa-2.6.dylib”或其他东西。

简而言之:确保您的框架和库名称中没有“Qt”,否则您将遇到 macdeployqt 问题。

希望这个答案可以帮助遇到同样问题的人。

于 2010-08-10T23:17:56.547 回答