无法使用QSQLITE2 Qt插件加载sqlite.dll

无法使用QSQLITE2 Qt插件加载sqlite.dll,qt,sqlite,dll,qmake,qsqldatabase,Qt,Sqlite,Dll,Qmake,Qsqldatabase,我使用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 一切正常 现在,

我使用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

一切正常

现在,我有了另一个DLL(也实现为Qt插件,一个自定义的),它使用了QSQLITE2 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,因为
无效的位置访问
或类似的原因。我不知道任何细节,这就是问题所在

运行时,
sqlite.dll
位于应用程序目录中

当我在调试模式下运行应用程序时,它会在某些程序集文件中崩溃,但在堆栈跟踪中,我可以看到它在sqlite.dll的某个地方,在sqlite_步骤符号中。我只知道这些

注1)我有另一个插件dll,即
my3.dll
,它使用QSQLITE插件(用于sqlite3),并与
sqlite3.dll
链接,这个插件可以正常加载。我自己也编译过QSQLITE插件(即使有Qt提供的插件,那是因为Qt静态链接到sqlite3,我希望它动态链接到
sqlite3.dll

注2)这两个插件在Linux下都可以正常工作

有什么可能出错的提示吗?我还能查什么

编辑:

我刚刚执行了一个测试:我从插件中删除了
my.dll
,以避免加载它。然后我将代码添加到
main.cpp

    QSqlDatabase::addDatabase("QSQLITE2", ":memory:");

问题是,它也崩溃了,具有非常相同的堆栈跟踪(就在这一行,我调试了它)。因此,我认为sqlite2 Qt插件有问题,但我仍然不知道是什么。我查找了另一个
sqlite.dll
,我刚从sqlite.org下载了一个:-这是正式版本,但它与我拥有的文件完全相同,也以同样的方式失败。

结果是
qsqlite2d.dll
无法链接
sqlite.dll
,因为
sqlite.dll
不是在调试模式下编译的。在发布模式下重新编译应用程序后(因此使用
qsqlite2.dll
,而不是
qsqlite2d.dll
),插件将正确加载并工作


这是有道理的,但还有一件事让我感到困扰——
qsqlited.dll
(对于sqlite3)链接到
sqlite3.dll
没有问题。无论我是编译debug还是release,单一的
sqlite3.dll
都可以使用debug和release插件。有人知道这怎么可能吗?如果您这样做,请发表评论,我将不胜感激。

另一个注意事项:sqlite.h定义了
extern const char sqlite_encoding[]
这是sqlite.dll中没有定义的(我无法编译QSQLITE2插件),因此我必须编辑文件
qsql_sqlite2.cpp
并添加行:
const char sqlite_encoding[]=“UTF-8”-然后正确编译Qt插件。我不确定这是否相关,但我只是想说得准确一点。