QMYSQL驱动程序可用但未加载
如何在Qt中加载QMYSQL驱动程序可用但未加载,mysql,qt,qt5,Mysql,Qt,Qt5,如何在Qt中加载qmysql驱动程序?我有以下生成这些结果的代码: ("QSQLITE", "QMYSQL", "QMYSQL3") QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 有关于如何加载它的建议吗?您可以尝试使用strace诊断问题-似乎QMYSQL驱动程序可能需要一些运行时库依赖项才能工作。您可以使用QPluginLoader获得更好的错误
qmysql
驱动程序?我有以下生成这些结果的代码:
("QSQLITE", "QMYSQL", "QMYSQL3")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
有关于如何加载它的建议吗?您可以尝试使用
strace
诊断问题-似乎QMYSQL驱动程序可能需要一些运行时库依赖项才能工作。您可以使用QPluginLoader
获得更好的错误消息
当我遇到MySQL驱动程序的同样问题时,消息类似于“该版本是使用除此Qt版本之外的其他选项编译的”
当时QtSDK附带的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();
我还发现了一条旧消息:
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"
好的,只需将
sqldrivers
文件夹复制到我的调试文件夹,它就成功了 在Windows上(请参见目录结构):
我的答覆是:
QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
db.setDatabaseName("dbname");
db.setHostName("localhost");
db.setUserName("usernm");
db.setPassword("password");
if (db.open())
{
qDebug() << "SUCCESS!";
db.close();
}
QSqlDatabase数据库(QSqlDatabase::addDatabase(“QMYSQL”);
db.setDatabaseName(“dbname”);
db.setHostName(“localhost”);
db.setUserName(“usernm”);
db.setPassword(“密码”);
if(db.open())
{
qDebug()我们应该先检查驱动程序
$ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers
然后我们可以找到一些文件
使用下面的命令检查库
$ ldd libqsqlmysql.so
如果发现问题libmysqlclient_r.so.16=>未找到
,则可能是库依赖性问题
在我在互联网上做了一些研究之后,有一种方法很简单
$ cd /usr/lib/x86_64-linux-gnu
如果您发现libmysqlclient\r.so.18
$ cp libmysqlclient_r.so.18 libmysqlclient_r.so.16
这里有几个关于这个问题的非常好的链接:
在基于Unix的系统上手动制作插件(来自Qt文档):
这是一个专门针对这个问题编写的非常好的链接(别忘了从源代码处安装Qt,这可以通过在从.run可执行文件安装时在第一步中选中相应的(隐藏)框来完成,也可以通过下载“Qt everywhere opensource src”版本来完成):
享受,
佩曼
与我在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
现在是我的工作了。
所有最好的都遇到了同样的问题,谷歌的一些研究和直觉最终解决了这个问题。
使用Qt5.9.1和Ubuntu 17.10
首先,检查是否存在libmysqlclient.so.18=>notfound
的错误
:~/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
当时,这些问题都没有为我解决,我决定进一步查看synaptic软件包,并意识到libqt5sql5-mysql
version 5.9.1没有安装,因此安装它解决了问题,但我在执行ldd时仍有一条消息
./libqsqlmysql.so:/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:找不到版本`libmysqlclient_18'(为./libqsqlmysql.so所需)
在那之后,我找到了一些链接,这些链接引导我找到了一个真正的解决方案,如果你想知道发生了什么的话,下面就是它们
我下载了第三个链接中所述的库,工作起来很有魅力。希望能有所帮助
我在windows上…它是否可用?有一个很棒的工具称为Process Monitor(procmon)-它可以完成大致相同的任务。调试文件夹路径在哪里?我认为您应该创建一个软链接:ln-s libmysqlclient_r.so.18 libmysqlclient_r.so.16
:/$ locate libmysqlclient
:/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18
ls -alh | grep libmysql