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

但是,如果我第二次运行它,它们就是。此外,“如果应用程序使用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 Creator 2.0
  • 豹10.5.8
  • 最佳答案

    问题出在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/"
        }
    

    bundle 软件中名称中带有“Qt”的第一个框架/ dylib名称用于确定插件路径。由于我 bundle 包中的第一个框架/ dylib名称是“QtSolutions_QtSingleApplication-2.6”,因此您可以看到图片。因此,我想一种解决方法是将dylib重命名为“qsa-2.6.dylib”或其他名称。

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

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

    10-04 21:46