我想将我的数据库(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离线模式。

我该怎么办?

最佳答案

重复10次:


由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题
由于使用不同的soname,我将永远不会使用符号链接来解决缺少的库问题


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

因此,首先要做的是:摆脱您介绍的符号链接。进入/usr/lib/x86_64-linux-gnu/并将其删除。现在做。



然后,如何重新编译该插件,使其在Ubuntu上运行?

(或者,实际上,在任何地方。甚至在Windows或Mac上。只需修改说明即可)

一步步:


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


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

关于c++ - Qmysql驱动程序未加载但可用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40328372/

10-11 10:53