我尝试使用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
我读到了一些论坛,需要制作一个我试过的符号链接,但我总是这个错误
答案 0 :(得分:1)
假设为了获得此错误,您从qt.io下载的二进制包中安装了Qt:
/dir/where/you/installed/Qt/version/Source/
qtbase/src/plugins/sqldrivers/mysql
qmake
或类似版本)运行/dir/where/you/installed/Qt/version/arch/bin/qmake
make
,如果它在未找到标题/库的情况下爆炸,请检查您是否正确安装了这些MySQL客户端开发包这应该会给你一个全新的插件,并且用手指交叉,它已经放在正确的位置。否则找到新的libqsqlmysql.so
,ldd
以确保它没问题,并用新的插件覆盖旧的插件。
答案 1 :(得分:1)
我终于找到了解决问题的方法,所以我从libmysqlclient16 Debian amd64下载libmysqlclient16
我做了dpkg -i libmysqlclient16_5.1.73-1_amd64.deb
我重新启动并编译了我的Qt项目,我无法错误
答案 2 :(得分:0)
我知道这是一个老问题,但我有一个稍微不同的解决方案,可能是因为自那时起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)你需要做的第二件事是确保你已经使用sources目录安装了Qt。 检查你是否有foulder $ QTDIR / version / Src。如果还没有,那么在QTDIR中运行维护工具并通过检查已安装(或希望安装)的套件下的“sources”选项添加Src foulder。
3)然后在你的终端
中输入sqldrivers应该去的地方> cd yourQTDIR/yourVersion/Src/qtbase/src/plugins/sqldrivers
并在终端上运行:
> make
> make install
这应该在文件夹中创建驱动程序libqsqlite.so和libqsqlmysql.so:yourQTDIR / yourVersion / yourCompiler / plugins / sqldrivers
然后我们按照官方网站http://doc.qt.io/qt-5/sql-driver.html中的说明更新sql头的路径,但是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到找到它。