私は QtCreator + mingw を使用しています。
QSQLITE2 プラグインをコンパイルしました。Qt ソース コードにプラグイン ディレクトリを入力しただけです。
c:\Qt\Qt5.2.0\5.2.0\Src\qtbase\src\plugins\sqldrivers\sqlite
そして、ローカルに持っているsqlite 2.8.17でビルドしました(dllおよびヘッダーとして):
qmake "LIBS+=-Lc:\projects\lib -lsqlite" "INCLUDEPATH+=c:\projects\include"
make
make install
すべてが正常に構築されます。
現在、QSQLITE2 Qt プラグインを使用する別の DLL (Qt プラグイン、カスタム プラグインとしても実装されています) があります。私自身の dll も sqlite.dll にリンクされています。したがって、次のようになります。
my.dll depends on sqlite.dll
%QT_PLUGINS%\qsqlite2d.dll depends on sqlite.dll
my.dll uses qsqlite2d.dll through Qt's plugin engine
myApp.exe loads my.dll
問題は、私のアプリケーションが my.dll を読み込めないinvalid location access
ことです。詳細はわかりませんが、それが問題です。
はsqlite.dll
、実行時にアプリケーション ディレクトリにあります。
アプリケーションをデバッグ モードで実行すると、一部のアセンブリ ファイルでクラッシュしますが、スタック トレースでは、sqlite_step シンボルの sqlite.dll 内のどこかにあることがわかります。私が知っているのはそれで全てです。
注1)my3.dll
QSQLITEプラグイン(sqlite3用)を使用し、リンクされている別のプラグインdll、があり、これは問題sqlite3.dll
なくロードされます。私自身も QSQLITE プラグインをコンパイルしました (Qt で提供されていたプラグインもありましたが、これは Qt が sqlite3 に静的にリンクされていて、動的にリンクするようにしたかったためsqlite3.dll
です)。
注 2) どちらのプラグインも Linux では問題なく動作します。
何が間違っている可能性がありますか?他に何が確認できますか?
編集:
テストを実行しました:my.dll
プラグインから削除して、まったくロードしないようにしました。次に、次のコードを追加しましたmain.cpp
。
QSqlDatabase::addDatabase("QSQLITE2", ":memory:");
問題は、まったく同じスタックトレースでクラッシュしたことです(この行でデバッグしました)。したがって、sqlite2 Qt プラグインに何か問題があると思いますが、まだ何が問題なのかわかりません。私は他のものを探しましたsqlite.dll
.sqlite.orgからダウンロードしたものです: http ://www.sqlite.org/sqlitedll-2_8_17.zip -これは公式ビルドですが、私が持っていたのとまったく同じファイルであり、失敗します同じ方法。