我试图使用QT中的MySQL模块,但没有结果,该模块存在,但QT没有加载它。我有这个错误
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
QSqlError("", "Driver not loaded", "Driver not loaded")
如果我做一个ldd libqsqlmysql.so
,我会得到这个结果
linux-vdso.so.1 (0x00007ffe89950000)
libmysqlclient_r.so.16 => not found
libQt5Sql.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fdc67aaf000)
libQt5Core.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fdc67372000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdc6706b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdc66cc2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdc66aa4000)
libicui18n.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.53 (0x00007fdc66658000)
libicuuc.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.53 (0x00007fdc662cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdc660c8000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fdc65ec6000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fdc65cbe000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fdc659c5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdc656c4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdc654ae000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdc67f1c000)
libicudata.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.53 (0x00007fdc63e25000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fdc63be8000)
问题是我认为这条线路是libmysqlclient_r.so.16 => not found
如果我做一个locate mysqlclient
,我会得到这个重复的
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.0.0
/usr/share/doc/libmysqlclient18
/usr/share/doc/libmysqlclient18/NEWS.Debian.gz
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/usr/share/doc/libmysqlclient18/changelog.gz
/usr/share/doc/libmysqlclient18/copyright
/var/cache/apt/archives/libmysqlclient18_5.5.43-0+deb7u1_amd64.deb
/var/cache/apt/archives/libmysqlclient18_5.5.44-0+deb7u1_amd64.deb
/var/lib/dpkg/info/libmysqlclient18:amd64.list
/var/lib/dpkg/info/libmysqlclient18:amd64.md5sums
/var/lib/dpkg/info/libmysqlclient18:amd64.postinst
/var/lib/dpkg/info/libmysqlclient18:amd64.postrm
/var/lib/dpkg/info/libmysqlclient18:amd64.shlibs
我读到一些论坛,需要做一个符号链接,我试过了,但我总是这个错误
假设为了获得此错误,您从Qt.io:下载的二进制包中安装了Qt
- 安装MySQL客户端开发包
- 运行MaintenanceTool(安装Qt的地方)
- 要求它安装额外的软件包
- 至少为基本模块安装"源组件"
- 转到
/dir/where/you/installed/Qt/version/Source/
- 进入
qtbase/src/plugins/sqldrivers/mysql
- 从非常相同的Qt版本(
/dir/where/you/installed/Qt/version/arch/bin/qmake
或类似版本)运行qmake
- 运行
make
,如果它爆炸时没有找到头/库,请检查您是否正确安装了MySQL客户端开发包
这应该会给你一个全新的插件,并且祈祷它已经放在了正确的位置。否则,请找到新的libqsqlmysql.so
、ldd
,以确保其正常,并用新插件覆盖旧插件。
我终于找到了解决问题的方法,所以我从libmysqlclient16 Debian amd64 下载了libmysqlclient16
我做了dpkg -i libmysqlclient16_5.1.73-1_amd64.deb
之后
我重新启动并编译了我的Qt项目,我不能错误
我知道这是一个老问题,但我遇到了同样的问题,但解决方案略有不同,可能是由于此后的Qt更新。
我将提供适用于我运行Fedora 26和内核4.13和Qt 5.9.1 的解决方案
找到你的Qt安装路径,让我们在这里称之为QTDIR。在我的情况下,它安装在/home/Qt5。因此QTDIR=/home/Qt5/我的版本是5.9.1。因此,我在QTDIR中也有一个文件夹"5.9.1",我会像Pepe上面所做的那样称之为"版本"文件夹。最后一个取决于安装的文件夹是编译器文件夹。在我的情况下,它是QTDIR/version/中的gcc_64
既然您已经找到了自己,让我们按照步骤安装Qt的驱动程序。
1) 如果您的linux发行版没有安装SQL头,则必须首先安装它们。在Fedora中,我试用了mysql-devel 社区
> sudo dnf install community-mysql-devel
您必须为您的发行版搜索并安装适当的SQL包。请记住,主要思想是安装一些开发包,以便访问标头。
2) 你需要做的第二件事是确保你已经安装了带有源目录的Qt。检查您是否有文件夹$QTDIR/version/Src。如果没有,请在QTDIR中运行维护工具,并通过检查已安装(或希望安装)的工具包下的"源代码"选项来添加Src文件夹。
3) 然后在终端中键入sqldrivers
> cd yourQTDIR/yourVersion/Src/qtbase/src/plugins/sqldrivers
并在终端上运行:
> make
> make install
这应该在以下文件夹中创建驱动程序libqsqlite.so和libqsqlmysql.so:yourQTDIR/yourVersion/yourCompiler/plugins/sqldrivers
然后,我们按照官方网站中的描述更新sql头的路径http://doc.qt.io/qt-5/sql-driver.html,但mysql标头的路径略有不同(您必须验证操作系统中的正确文件夹)。在我的例子中,MYSQL标头位于/usr/lib64中。转到
> cd yourQTDIR/yourVersion/Src/qtbase/src/plugins/sqldrivers/mysql
然后运行
> yourQTDIR/yourVersion/yourCompilerFolder/bin/qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib64 -lmysqlclient_r" mysql.pro
> make
> make install
这应该奏效。
4) 现在转到"yourQTDIR"/"yourVersion"/"yourCompiler"/plugins/sqldrivers并运行
> ldd libqsqlmysql.so
这将允许您检查是否有任何缺失的链接,并指导您找到更具体的解决方案。
从现在起,在几个Qt版本中,上述程序可能会发生变化。然而,需要记住的要点是:1)您必须安装MYSQL标头;2) 您必须在MYQSL的某个源文件夹中运行make和make install来创建插件,并且3)您必须更新MYSQL标头的路径,以便Qt找到它。