C++ macdeployqt不复制插件

C++ macdeployqt不复制插件,c++,macos,qt,macdeployqt,C++,Macos,Qt,Macdeployqt,我正在开发一个基于Qt的应用程序,当我在bundle上使用macdeployqt时,Qt插件不会复制到bundle中 但是,如果我再次运行它,它们是。此外,“如果应用程序使用QtSvg模块,则部署svg图标插件。”未完全填充-我的应用程序确实使用QtSvg,但未复制IConeEngines/*插件 我尝试使用-verbose=3运行它,最后几行是: Log: Created configuration file: "silverlock.app/Contents/Resources/qt.con

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

但是,如果我再次运行它,它们是。此外,“如果应用程序使用QtSvg模块,则部署svg图标插件。”未完全填充-我的应用程序确实使用QtSvg,但未复制IConeEngines/*插件

我尝试使用-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”的framework/dylib名称用于确定插件路径。因为我包中的第一个framework/dylib名称是“QtSolutions\u QtSingleApplication-2.6”。。。你明白了。所以我想一个解决办法是将动态库重命名为“qsa-2.6.dylib”或其他什么

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


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

Qt5.2也有同样的问题。正如您所建议的,通过从库名称中删除Qt解决了这个问题。pri:QTSINGLEAPPLICATION\u LIBNAME=$$qtLibraryTarget(Solutions\u SingleApplication-head)