使用相同的标志编译 Qt 应用程序和 Qt 插件(除了为编译 .dll 添加 -shared)后,执行时会出现错误消息:
“插件'Z:/bug_pyqt/plugin.dll'使用不兼容的Qt库。预期的构建密钥“ Windows mingw release full-config ”,得到“ Windows mingw debug full-config ””
如果主应用程序和插件都使用相同的标志编译,为什么会出现此错误消息?
它们是在 cygwin 下的 windows XP 上使用 mingw32-g++ 编译的,带有一个手工制作的 makefile。使用选项“-g”(并且插件仍然没有)编译主应用程序会使事情“工作”并且错误消息消失但是基本原理是什么?
文件 main.cpp 编译成 a.out:
#include <QCoreApplication>
#include <QPluginLoader>
#include <QDebug>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QPluginLoader loader("plugin.dll");
loader.setLoadHints(QLibrary::ResolveAllSymbolsHint | QLibrary::ExportExternalSymbolsHint);
loader.load();
if(!loader.isLoaded()) {
qDebug() << loader.errorString();
exit(1);
}
(void)loader.instance();
return app.exec();
}
文件插件.h:
#ifndef PLUGIN_H
#define PLUGIN_H
#include <QObject>
class Plugin : public QObject
{
Q_OBJECT
public:
Plugin();
~Plugin();
};
#endif
文件 plugin.cpp 编译成 plugin.dll:
#include "plugin.h"
#include <QtPlugin>
Q_EXPORT_PLUGIN2(Plugin, Plugin)
Plugin::Plugin() { }
Plugin::~Plugin() { }
文件生成文件:
MOC=/cygdrive/c/Qt/4.8.4/bin/moc
GCC=/cygdrive/c/MinGW/bin/mingw32-g++.exe
FLAGS=-Ic:/Qt/4.8.4/include -Ic:/Qt/4.8.4/include/QtCore -Lc:/Qt/4.8.4/lib -Lc:/Qt/4.8.4/bin -lQtCore4
LIBFLAGS=-shared
all:
$(MOC) plugin.h > plugin_moc.cpp
$(GCC) -o a.out main.cpp $(FLAGS)
$(GCC) -o plugin.dll $(LIBFLAGS) plugin_moc.cpp plugin.cpp $(FLAGS)