QSqlDatabase:驱动程序未加载,来自另一个dll

时间:2017-07-13 13:27:35

标签: c++ windows qt dll

互联网上有大量关于驱动程序负载失败的查询,但我的情况看起来很独特。请帮忙。

我创建了一个dll代码,它使用了QSqlDatabase。所以依赖就像mylib.dll-> qt5sql.dll-> qsqlpsql.dll 当我使用mylib.dll运行测试应用程序时,它无法加载驱动程序。它列出了可用的驱动程序,如下所示: QSqlDatabase:可用的驱动程序:QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

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

1 个答案:

答案 0 :(得分:0)

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