如何在Qt中加载qmysql
驱动程序?我有以下代码产生这些结果:
("QSQLITE", "QMYSQL", "QMYSQL3")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
有关如何加载它的任何建议吗?
答案 0 :(得分:11)
我们应该先检查我们的司机
$ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers
然后我们可以找到一些文件
使用以下命令检查库
$ ldd libqsqlmysql.so
如果发现问题libmysqlclient_r.so.16 => not found
,则可能是库依赖问题。
在我对互联网进行一些研究后,有一种方法很容易。
$ cd /usr/lib/x86_64-linux-gnu
如果找到libmysqlclient_r.so.18
,
$ cp libmysqlclient_r.so.18 libmysqlclient_r.so.16
答案 1 :(得分:3)
好吧,仅仅通过将sqldrivers
文件夹复制到我的调试文件夹就可以工作了!
答案 2 :(得分:2)
您可以尝试使用strace
来诊断问题 - 似乎QMYSQL驱动程序可能需要一些运行时库依赖项才能工作。
答案 3 :(得分:2)
在Windows上(参见目录结构):
the_qt_app.exe
libmysql.dll
sqldrivers/qsqlmysql4.dll
答案 4 :(得分:1)
您可以使用QPluginLoader
获取更好的错误消息。
当我遇到与MySQL驱动程序相同的问题时,该消息类似于“该版本是使用除此Qt版本之外的其他选项编译的”。
当时Qt SDK附带的Qt资源似乎与其二进制文件不兼容。
下载Qt源并编译我自己的Qt版本和MySQL驱动程序后,问题就消失了。
编辑:一些示例代码。
QPluginLoader loader;
loader.setFileName("/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();
loader.setFileName("/Users/niklaswulf/QtSDK/Qt/5.0.1/5.0.1/clang_64/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();
编译5.0.1时,这是输出:
false
"The file '/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib' is not a valid Qt plugin."
true
"Unknown error"
我也找到了旧消息:
The plugin '/path/to/some/libqsqlmysql.dylib' uses incompatible Qt library. Expected build key "macosx macx-cocoa g++-4 full-config", got "macosx macx-cocoa g++-4 no-pkg-config"
答案 5 :(得分:1)
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
我在使用Qt-5.2.0的fedora20(64位)中遇到的问题,然后按照步骤进行:
$ cd /opt/Qt5.2.0/5.2.0/gcc_64/plugins/sqldrivers
$ ls
libqsqlite.so libqsqlmysql.so
使用以下命令检查库依赖关系:
$ ldd libqsqlmysql.so
我发现了问题:
libmysqlclient_r.so.16 => not found
可能是库依赖问题。所以解决这个问题:
链接库文件:
$ ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so
再次:
$ ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so.16
现在它为我工作。 一切顺利
答案 6 :(得分:0)
这个问题有几个非常好的链接:
在基于Unix的系统上手动制作插件(来自Qt文档): http://qt-project.org/doc/qt-5/sql-driver.html
一个专门针对这个问题的精心编写的链接(不要忘记从源代码安装Qt,这可以通过在从.run安装时检查第一步中的相应(隐藏)框来完成可执行文件或下载'qt-everywhere-opensource-src'版本): http://adamcavendish.is-programmer.com/posts/40431.html
享受, Peyman的
答案 7 :(得分:0)
遇到同样的问题,一些谷歌的研究和直觉终于解决了它。 使用Qt5.9.1和Ubuntu 17.10
首先,检查libmysqlclient.so.18 => not found
的错误是否存在
:~/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
其次,搜索libmysqlclient
的位置 :/$ locate libmysqlclient
第三,转到libmysqlclient所在的文件夹,然后创建链接
:/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18
并检查之前的链接
ls -alh | grep libmysql
那一刻,没有一个为我解决,我决定进一步查看突触包,并意识到libqt5sql5-mysql
版本5.9.1没有安装,所以安装它解决了问题,但我仍然有做ldd时的消息
./ libqsqlmysql.so:/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:版本`libmysqlclient_18&#39;找不到(由./libqsqlmysql.so提供)
之后,找到了一些链接,指导我找到真正的解决方案,如果你想知道发生了什么,就是这些链接
我下载了第三个链接中所述的库,并且像魅力一样工作。希望它有所帮助!
答案 8 :(得分:-2)
我的回答:
QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
db.setDatabaseName("dbname");
db.setHostName("localhost");
db.setUserName("usernm");
db.setPassword("password");
if (db.open())
{
qDebug() << "SUCCESS!";
db.close();
}