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++ でコンパイルされました。オプション "-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();
}
ファイル plugin.h:
#ifndef PLUGIN_H
#define PLUGIN_H
#include <QObject>
class Plugin : public QObject
{
Q_OBJECT
public:
Plugin();
~Plugin();
};
#endif
plugin.dll にコンパイルするファイル plugin.cpp:
#include "plugin.h"
#include <QtPlugin>
Q_EXPORT_PLUGIN2(Plugin, Plugin)
Plugin::Plugin() { }
Plugin::~Plugin() { }
ファイル Makefile:
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)