Qmysql驱动程序未加载但它可用

时间:2016-10-30 11:00:08

标签: c++ mysql qt ubuntu qt5

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

<my-element>
  <!-- the "extended" native element is wrapped -->
  <div></div>
</my-element>

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/

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

我该怎么办?

1 个答案:

答案 0 :(得分:2)

重复10次:

  1. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  2. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  3. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  4. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  5. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  6. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  7. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  8. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  9. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  10. 我永远不会使用符号链接来解决由于不同的soname而导致的库存问题
  11. 永远永远通过符号链接解决这类问题。如果您的系统未提供库或可执行文件所需的确切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. 从安装程序运行maintanance工具,并要求它也安装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中的那个。如果由于任何原因它没有被自动覆盖,请在那里手动移动。
    7. 完成!享受您的MySQL数据库连接。