macdeployqt没有复制插件

Jak*_*les 3 c++ macos qt macdeployqt

我正在开发一个基于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" 
Run Code Online (Sandbox Code Playgroud)

从上一条消息的内容来看,似乎有意继续运行,但没有 - 几乎就像它崩溃一样.

为什么会这样?macdeployqt之前一直没有问题.

使用:

  • Qt 4.6
  • Qt Creator 2.0
  • Leopard 10.5.8

Jak*_*les 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/"
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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