【问题标题】:Qmysql driver not loaded but it's availableQmysql 驱动程序未加载但可用
【发布时间】:2016-10-30 11:00:07
【问题描述】:

我想将我的数据库(mysql)与 ubuntu 16.04 上的 Qt 库连接。
但我遇到了这个错误:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

ldd /Qt-PATH/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/libqsqlmysql.so 的结果是:

linux-vdso.so.1 =>  (0x00007fff9d55a000)
    libmysqlclient_r.so.16 => not found
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007efc887eb000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007efc885b3000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007efc8839a000)
    libssl.so.10 => not found
    libcrypto.so.10 => not found
    libQt5Sql.so.5 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007efc88154000)
    libQt5Core.so.5 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007efc87a38000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efc8781b000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efc87499000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efc8718f000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efc86f79000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efc86bb0000)
    libicui18n.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007efc86715000)
    libicuuc.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007efc8635d000)
    libicudata.so.56 => /home/hassan-setayesh/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007efc8497a000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efc84775000)
    libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007efc84573000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efc8436b000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007efc84059000)
    /lib64/ld-linux-x86-64.so.2 (0x0000564692881000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007efc83de9000)

为了解决这个问题:libmysqlclient_r.so.16 => not found 我使用以下命令将其链接到libmysqlclient.so.20.3.2
cd /usr/lib/x86_64-linux-gnu/ sudo ln -s libmysqlclient.so.20.3.2 libmysqlclient_r.so.16

我的Qt版本是5.7离线模式。

我该怎么办?

【问题讨论】:

    标签: c++ mysql qt ubuntu qt5


    【解决方案1】:

    重复10次:

    1. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    2. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    3. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    4. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    5. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    6. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    7. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    8. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    9. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题
    10. 我永远不会使用符号链接来解决由于不同的 soname 而导致的缺少库问题

    永远永远通过符号链接解决这类问题。如果您的系统没有提供库或可执行文件所需的确切 soname,则需要重新编译该库或可执行文件。库的文件名中有 soname 版本号是有原因的,不匹配的 soname 将导致动态链接器/加载器的 not found。您只是通过为库插入损坏的 soname 来破坏该过程和您的整个系统

    所以,要做的第一件事:删除您引入的符号链接。 进入 /usr/lib/x86_64-linux-gnu/ 并删除它。 立即进行


    那么,如何重新编译插件以使其在 Ubuntu 上运行?

    (或者,实际上,任何地方。甚至是 Windows 或 Mac。只需调整说明)

    一步一步:

    1. 安装 mysql 开发包。在 Ubuntu 上,它应该是 libmysqlclient-dev 包,但请仔细检查以防在您的特定 Ubuntu 版本上更改名称。继续 https://packages.ubuntu.com 并使用基于文件的搜索来查找 mysql.h
    2. 从安装程序运行维护工具,并要求它也安装 Qt 源组件。您可以在 Qt 安装目录中找到该工具。
    3. 进入INSTALL_DIR/Src/5.7/qtbase/src/plugins/sqldrivers/mysql(根据您的实际情况调整INSTALL_DIR5.7)。
    4. 运行右侧 qmake。正确的是来自同一 Qt 安装的版本,其版本与源代码匹配。在您的情况下,它可能位于 INSTALL_DIR/5.7/gcc_64/bin/qmake
    5. 运行make。如果由于找不到某些库而无法编译,请在系统上安装所需的软件包。上面链接的 Ubuntu 包搜索可能很有用。
    6. 一旦make运行成功,它将创建一个全新的libqsqlmysql.so。它应该会自动覆盖INSTALL_DIR/5.7/gcc_64/plugins/sqldrivers 中的那个。如果由于某种原因它没有被自动覆盖,请手动将其移到那里。

    完成!享受您的 MySQL 数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多