C++ QSqlDatabase:未从另一个dll中加载驱动程序

C++ QSqlDatabase:未从另一个dll中加载驱动程序,c++,windows,qt,dll,C++,Windows,Qt,Dll,互联网上有很多关于司机负载故障的查询,但我的情况看起来很独特。请帮忙 我已经为我的代码创建了一个dll,它使用QSqlDatabase。因此,依赖关系类似于mylib.dll->qt5sql.dll->qsqlpsql.dll 当我使用mylib.dll运行测试应用程序时,它无法加载驱动程序。它列出了可用的驱动程序,如下所示: QSqlDatabase:可用驱动程序:QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL7 然而,当我尝试将我的代码用作静态库时,它工作

互联网上有很多关于司机负载故障的查询,但我的情况看起来很独特。请帮忙

我已经为我的代码创建了一个dll,它使用QSqlDatabase。因此,依赖关系类似于mylib.dll->qt5sql.dll->qsqlpsql.dll 当我使用mylib.dll运行测试应用程序时,它无法加载驱动程序。它列出了可用的驱动程序,如下所示: QSqlDatabase:可用驱动程序:QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL7


然而,当我尝试将我的代码用作静态库时,它工作得非常好。因此,对libpq.dll的依赖关系、路径值等都可以。还有其他人遇到过这样的问题吗?

我发现这不是QT的问题,而是由于在源代码中使用了静态变量,我的DLL出现了问题。正如我们所知,如果静态变量不是DLL代码的一部分,则会在运行时创建两个不同的静态变量实例(分别用于exe和DLL)。我有一个包含这些静态变量的静态库。已链接此静态库以创建DLL。因此,基本上驱动程序名没有传递到DLL,从而导致“驱动程序未加载”错误。我已通过消除静态库创建来修复此问题。现在,正在一起构建源代码以创建DLL。

您是否将所有三个DLL都与文本应用程序可执行文件放在同一文件夹中?在这方面,我尝试了多种组合。1.已将exe和所有DLL(包括qt5core和qt5sql)复制到同一文件夹中。2.exe和插件/sqldrivers/driverdells 3。exe和sqldrivers/driverdells 4。qt的默认安装。我还使用了QCoreApplication::addLibraryPath(“./插件”);但它只能在我的代码的dll之外工作。它没有任何效果。为此,您甚至尝试了setLibraryPath()。将驱动程序放入可执行文件2附近的
sqldrivers
文件夹中。通过
QCoreApplication::addLibraryPath
sqldrivers
文件夹添加到库路径。3.在代码中使用驱动程序之前,请尝试手动加载该驱动程序:
QPluginLoader(“sqldrivers/qsqlpsql.dll”);loader.load()