【问题标题】:QSqlDatabase: QMYSQL driver not loaded on Ubuntu 15.04 64bitsQSqlDatabase:未在 Ubuntu 15.04 64 位上加载 QMYSQL 驱动程序
【发布时间】:2016-09-19 01:32:36
【问题描述】:

在 Ubuntu 15.04 64 位中,我安装了 Qt5.6(在线安装程序),在尝试将我的开发环境从 Windows 7 迁移到 Linux 时,我遇到了以下问题:

SqlDatabase: QMYSQL driver not loaded

this之后,我找到了~/Qt/5.6/gcc_64/plugins/sqldrivers/libqsqlmysql.so,然后:

$ ldd libqsqlmysql.so
    linux-vdso.so.1 =>  (0x00007ffffd571000)
    libmysqlclient_r.so.16 => not found
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe94ef24000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fe94ecec000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fe94ead2000)
    libssl.so.10 => not found
    libcrypto.so.10 => not found
    libQt5Sql.so.5 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Sql.so.5 (0x00007fe94e88d000)
    libQt5Core.so.5 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libQt5Core.so.5 (0x00007fe94e17a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe94df5c000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe94dc4d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe94d944000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe94d72e000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe94d364000)
    libicui18n.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicui18n.so.56 (0x00007fe94cec9000)
    libicuuc.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicuuc.so.56 (0x00007fe94cb11000)
    libicudata.so.56 => /home/user/Qt/5.6/gcc_64/plugins/sqldrivers/../../lib/libicudata.so.56 (0x00007fe94b12e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe94af29000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fe94ad27000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe94ab1f000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fe94a80f000)
    /lib64/ld-linux-x86-64.so.2 (0x000056024837f000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe94a5a2000)

告诉libmysqlclient_r.so.16 => not found。事实上,我似乎有一个更新的版本:

find / -name libmysqlclient_r*
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.1.0
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.a

也许这就是问题所在。有人可以确认吗?我应该如何进行?

【问题讨论】:

  • 这很可能是问题所在,是的。请注意,它也会报告 libssl 和 libcrypto 丢失。如果您的发行版没有提供该版本的 mysqlclient,您需要自己编译 mysql 插件。

标签: c++ linux qt ubuntu qt5.6


【解决方案1】:

首先,请仔细检查您是否安装了包含libssl.solibcrypto.solibmysqlclient_r.so 的软件包(看起来您安装了最后一个,很可能您也安装了前两个,但请仔细检查)。

那么,你的问题是你有那些具有不同 SONAME 的共享对象,表明它们与 Qt 附带的插件二进制不兼容,因此需要重新编译。

因此:

  1. 安装上述软件包的开发版本libssl-devmysql-client-dev 或类似)。

  2. 从您的 Qt 安装中运行 MaintenanceTool,并确保也选择安装 Qt 的源代码

  3. 进入QTDIR/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/

  4. 运行 right qmake,即来自 Qt 安装的那个(不是系统范围的一个或类似的)。确保它的最佳方法是提供完整路径:QTDIR/5.6/gcc_64/bin/qmake

  5. 运行make。希望这会起作用™;如果它抱怨缺少一些库,请安装它们并重新运行make

  6. 现在应该已经生成了一个新的libqsqlmysql.so 插件;用这个新的覆盖旧的。

【讨论】:

  • 这对我来说不是“正常工作™”。我必须做的是步骤 1 到 4,然后编辑 Makefile 并将所有出现的“-std=c++1z”替换为“-std=c++11”。原因是这是建立在 RHEL 上的,而我在 Ubuntu 上,并且相应的 gcc 支持不同的 -std= 标志。
  • 请问,那是什么Qt版本?理论上 qmake 应该选择在编译 Qt 本身时使用的相同标志。 (闻起来像虫子)
  • 最新最好的 5.8 :)
  • 哦,Ubuntu 版本是 16.04 amd64 和 gcc 4.9.3
  • Aaaand,最后是评论。当 90% 的最终用户使用 Ubuntu 时,为什么要在 RHEL 上构建?
【解决方案2】:

有两个解决此问题的方法。首先尝试找到位于您的 qt 目录中的 qtbase 文件夹,然后尝试运行 ./configure -plugin-sql-mysql 如果驱动程序丢失,它将激活驱动程序。

如果这不能解决您的问题,我建议您仔细检查您的代码并尝试运行一个连接到 Sql 数据库的 Qt 示例。 IE。修改连接到本地 SQLite 数据库的示例代码,将参数更改为 MySQL。如果此示例未引发“驱动程序未加载错误”,请按照以下步骤操作。

确保您使用的是 QSqlDatabase 的静态函数,而不是使用

QSqlDatabase *db = new QSqlDatabase(); 
db->addDatabase("QMYSQL");  

你应该这样做

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

【讨论】:

  • 我很好奇这两种方式的区别(“QSqlDatabase的静态函数”)?
【解决方案3】:

Qt5.11.1 我也有同样的问题,我的操作系统是Ubuntu16.04,我已经通过从这里安装libmysqlclient18 解决了这个问题

https://launchpad.net/ubuntu/xenial/amd64/libmysqlclient18/5.6.25-0ubuntu1

下载后从下载目录运行命令,

sudo dpkg -i libmysqlclient18_5.6.25-0ubuntu1_amd64.deb

【讨论】:

  • 感谢这在 ubutnu 16.04.3 和 Qt5.9.3 上对我来说很好
【解决方案4】:

我正在使用 Ubuntu 18.04.4 并使用系统的 Qt5 编译我的项目。我安装libqt5sql5-mysql包后驱动加载成功。

sudo apt-get install libqt5sql5-mysql

【讨论】:

    【解决方案5】:

    若要在树莓派上使用 MySql 和 PyQt5,可以安装:

    sudo apt-get install libqt5sql5-mysql
    

    sudo apt-get install libqt5sql5-mysql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2016-12-02
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多