QT qmysql驱动未加载
QT qmysql driver not loaded
我知道这个论坛上已经有很多关于这个问题的话题,但我没能解决我的问题。
我的配置如下:
QT 版本:5.14.2 - mscv2017_64
编译器:mscv amd64
我的问题是我的应用程序没有加载 libmysql.dll。
这是我所做的:
我打开了qt提供的命令行MSCV 2017 64bits,我使用vcvarsall.bat amd64
初始化了我的环境。
然后我按照 documentation 中的说明构建了 sql 驱动程序。
这是 qmake 调用的结果:
然后,运行 nmake
和nmake install
以及文件夹C:\Qt.14.2\msvc2017_64\plugins\sqldrivers
中,我找到了以下文件。
然后我在创建应用程序的 exe 文件的文件夹中添加了 libmysql.dll
。我从 mysql 服务器安装文件夹 C:\Program Files\MySQL\MySQL Server 8.0\lib
中获得了这个文件。
然后我重建了我的应用程序,但我仍然出现同样的错误,说驱动程序没有加载。我使用 QT_DEBUG_PLUGINS=1
标志进行编译,得到的输出是:
"The plugin 'C:/Qt/5.14.2/msvc2017_64/plugins/sqldrivers/qsqlpsqld.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)"
not a plugin
QFactoryLoader::QFactoryLoader() checking directory path "C:/Users/Thomas Bouchan/Documents/Personal/C++/SSVP/build-SSVP-project-Desktop_Qt_5_14_2_MSVC2017_64bit-Release/release/sqldrivers" ...
Cannot load library C:\Qt.14.2\msvc2017_64\plugins\sqldrivers\qsqlmysql.dll: The specified module could not be found.
QLibraryPrivate::loadPlugin failed on "C:/Qt/5.14.2/msvc2017_64/plugins/sqldrivers/qsqlmysql.dll" : "Cannot load library C:\Qt.14.2\msvc2017_64\plugins\sqldrivers\qsqlmysql.dll: The specified module could not be found."
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7"
由此不知何去何从,在指定的文件夹中,dll就在那里...是64位还是32位的问题?我应该用另一个编译器构建驱动程序吗(不是 amd64
?)?
我终于设法让它工作了。
驱动编译没有问题,但问题出在libmysql.dll
文件上。我不知道这个 dll 发生了什么,但是当我用下载存档的那个替换它时 qsqlmysql.dll_Qt_SQL_driver_5.14.2_MSVC2017_64-Bit.zip。我只需要替换dll,而不是使用存档的插件。
用dependency walker打开qsqlmysqld.dll
,我发现libmysql.dll
中还需要两个额外的dll文件:LIBSSL-1_1-X64.dll
和LIBCRYPTO-1_1-X64.dll
。它们可以在 mysql 服务器的 bin 目录中找到。就我而言 C:\Program Files\MySQL\MySQL Server 8.0\bin
。
在可执行文件的目录中添加这些文件可以解决问题。感谢@king_nak 的提示!
我知道这个论坛上已经有很多关于这个问题的话题,但我没能解决我的问题。
我的配置如下:
QT 版本:5.14.2 - mscv2017_64
编译器:mscv amd64
我的问题是我的应用程序没有加载 libmysql.dll。 这是我所做的:
我打开了qt提供的命令行MSCV 2017 64bits,我使用vcvarsall.bat amd64
初始化了我的环境。
然后我按照 documentation 中的说明构建了 sql 驱动程序。
这是 qmake 调用的结果:
然后,运行 nmake
和nmake install
以及文件夹C:\Qt.14.2\msvc2017_64\plugins\sqldrivers
中,我找到了以下文件。
然后我在创建应用程序的 exe 文件的文件夹中添加了 libmysql.dll
。我从 mysql 服务器安装文件夹 C:\Program Files\MySQL\MySQL Server 8.0\lib
中获得了这个文件。
然后我重建了我的应用程序,但我仍然出现同样的错误,说驱动程序没有加载。我使用 QT_DEBUG_PLUGINS=1
标志进行编译,得到的输出是:
"The plugin 'C:/Qt/5.14.2/msvc2017_64/plugins/sqldrivers/qsqlpsqld.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)" not a plugin QFactoryLoader::QFactoryLoader() checking directory path "C:/Users/Thomas Bouchan/Documents/Personal/C++/SSVP/build-SSVP-project-Desktop_Qt_5_14_2_MSVC2017_64bit-Release/release/sqldrivers" ... Cannot load library C:\Qt.14.2\msvc2017_64\plugins\sqldrivers\qsqlmysql.dll: The specified module could not be found. QLibraryPrivate::loadPlugin failed on "C:/Qt/5.14.2/msvc2017_64/plugins/sqldrivers/qsqlmysql.dll" : "Cannot load library C:\Qt.14.2\msvc2017_64\plugins\sqldrivers\qsqlmysql.dll: The specified module could not be found." QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7"
由此不知何去何从,在指定的文件夹中,dll就在那里...是64位还是32位的问题?我应该用另一个编译器构建驱动程序吗(不是 amd64
?)?
我终于设法让它工作了。
驱动编译没有问题,但问题出在libmysql.dll
文件上。我不知道这个 dll 发生了什么,但是当我用下载存档的那个替换它时 qsqlmysql.dll_Qt_SQL_driver_5.14.2_MSVC2017_64-Bit.zip。我只需要替换dll,而不是使用存档的插件。
用dependency walker打开qsqlmysqld.dll
,我发现libmysql.dll
中还需要两个额外的dll文件:LIBSSL-1_1-X64.dll
和LIBCRYPTO-1_1-X64.dll
。它们可以在 mysql 服务器的 bin 目录中找到。就我而言 C:\Program Files\MySQL\MySQL Server 8.0\bin
。
在可执行文件的目录中添加这些文件可以解决问题。感谢@king_nak 的提示!