未加载MySql QT QMYSQL驱动程序

时间:2015-10-26 14:45:15

标签: mysql qt qt5

我尝试使用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

我读到了一些论坛,需要制作一个我试过的符号链接,但我总是这个错误

3 个答案:

答案 0 :(得分:1)

假设为了获得此错误,您从qt.io下载的二进制包中安装了Qt:

  • 安装MySQL客户端开发包
  • 运行MaintenanceTool(安装Qt的地方)
  • 要求它安装额外的包
  • 安装"源组件"至少对于Essential模块
  • 转到/dir/where/you/installed/Qt/version/Source/
  • 进入qtbase/src/plugins/sqldrivers/mysql
  • 非常相同的 Qt版本(qmake或类似版本)运行/dir/where/you/installed/Qt/version/arch/bin/qmake
  • 运行make,如果它在未找到标题/库的情况下爆炸,请检查您是否正确安装了这些MySQL客户端开发包

这应该会给你一个全新的插件,并且用手指交叉,它已经放在正确的位置。否则找到新的libqsqlmysql.soldd以确保它没问题,并用新的插件覆盖旧的插件。

答案 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到找到它。