MySql QT QMYSQL驱动程序未加载



我试图使用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.soldd,以确保其正常,并用新插件覆盖旧插件。

我终于找到了解决问题的方法,所以我从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的某个源文件夹中运行makemake install来创建插件,并且3)您必须更新MYSQL标头的路径,以便Qt找到它。

相关内容

  • 没有找到相关文章

最新更新