QSql驱动程序未加载,但可用

QSqldriver not loaded, but available

本文关键字:加载 驱动程序 QSql      更新时间:2023-10-16

我正在用Qt编写一个程序,遇到了一个小问题。这编译得很好,但我有这个:

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

当我在/opt/Qt/5.5/gcc_64/plugins/sqldrivers中使用ldd libqsqlmysql.so时,我得到的是:

./libqsqlmysql.so: /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.16: version `libmysqlclient_16' not found (required by ./libqsqlmysql.so)
linux-vdso.so.1 =>  (0x00007ffe02bb3000)
libmysqlclient_r.so.16 => /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.16 (0x00007fa3f8431000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa3f8217000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa3f7fde000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fa3f7dc4000)
libssl.so.10 => not found
libcrypto.so.10 => not found
libQt5Sql.so.5 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fa3f7b83000)
libQt5Core.so.5 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fa3f743d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa3f721e000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa3f6e9c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa3f6b94000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa3f697c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa3f65b2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa3f63ae000)
libicui18n.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.54 (0x00007fa3f5f3f000)
libicuuc.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.54 (0x00007fa3f5b91000)
libicudata.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.54 (0x00007fa3f4166000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fa3f3f64000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa3f3d5c000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fa3f3a4d000)
/lib64/ld-linux-x86-64.so.2 (0x0000558b780a6000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fa3f37df000)

我的代码:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("hostname");
db.setDatabaseName("name");
db.setUserName("username");
db.setPassword("password");

问题出在哪里?

编辑:我试着安装openssl,但当我写sudo apt-get install openssl时,我得到了这个:

    Reading package lists... Done
Building dependency tree       
Reading state information... Done
openssl is already the newest version.
openssl set to manually installed.
The following packages were automatically installed and are no longer required:
  kde-l10n-engb kde-l10n-pl libdlrestrictions1 libkdecore5
  linux-headers-4.2.0-16 linux-headers-4.2.0-16-generic linux-headers-4.2.0-18
  linux-headers-4.2.0-18-generic linux-headers-4.2.0-19
  linux-headers-4.2.0-19-generic linux-image-4.2.0-16-generic
  linux-image-4.2.0-18-generic linux-image-4.2.0-19-generic
  linux-image-extra-4.2.0-16-generic linux-image-extra-4.2.0-18-generic
  linux-image-extra-4.2.0-19-generic linux-signed-image-4.2.0-16-generic
  linux-signed-image-4.2.0-18-generic linux-signed-image-4.2.0-19-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

下一个编辑:好的,我再次使用ldd-libqmysql.so,我得到了这个:

./libqsqlmysql.so: /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.16: version `libmysqlclient_16' not found (required by ./libqsqlmysql.so)
linux-vdso.so.1 =>  (0x00007ffdb25e9000)
libmysqlclient_r.so.16 => /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.16 (0x00007f54d5b3f000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f54d5925000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f54d56ec000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f54d54d2000)
libssl.so.10 => /lib/x86_64-linux-gnu/libssl.so.10 (0x00007f54d5269000)
libcrypto.so.10 => /lib/x86_64-linux-gnu/libcrypto.so.10 (0x00007f54d4e26000)
libQt5Sql.so.5 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f54d4be6000)
libQt5Core.so.5 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f54d44a0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f54d4281000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f54d3eff000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f54d3bf7000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f54d39df000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f54d3615000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f54d3411000)
libicui18n.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.54 (0x00007f54d2fa2000)
libicuuc.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.54 (0x00007f54d2bf4000)
libicudata.so.54 => /opt/Qt/5.5/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.54 (0x00007f54d11c9000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f54d0fc7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f54d0dbf000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f54d0aaf000)
/lib64/ld-linux-x86-64.so.2 (0x000055d80d1dc000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f54d0842000)
sudo apt-get install openssl
cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10

并且,还要通知您的Qt分销商更改链接器。

注意

问题是Qt和您的libmysqlclient之间不兼容。现在,我们只能通过安装libmysqlclient18

apt-get install libmysqlclient18

而且它与你的Qt安装不兼容,因为它需要版本16。

我建议您升级您的Qt安装

得到了同样的问题,谷歌的一些研究和直觉最终解决了它。使用Qt5.9.1和Ubuntu 17.10

首先,检查libmysqlclient.so.18 => not found的错误是否存在

    :~/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so

其次,搜索libmysqlclient 在哪里

    :/$ locate libmysqlclient 

第三,转到libmysqlclient所在的文件夹,在那里创建链接

    :/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18

并检查之前与建立的链接

    ls -alh | grep libmysql

在那一刻,这些都没有为我解决,我决定在突触包中进一步研究,并意识到libqt5sql5-mysql版本5.9.1没有安装,所以安装它解决了问题,但我在做ldd-时仍然有一个消息

/libqsqlmysql.so:/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:找不到版本"libmysqlclient_18"(./libqsqlql.so要求)

在那之后,我找到了一些链接,引导我找到一个真正的解决方案,如果你想知道发生了什么,下面是它们

我下载了第三个链接中所述的库,并像符咒一样工作。希望它能有所帮助!

https://www.unix.com/unix-for-advanced-and-expert-users/107611-difference-between-libsqlclient-so-libsqlclient_r-so.html

http://www.tango-controls.org/community/forum/c/general/installation/ubuntu-1604-problem-installing-from-source-code-libmysqlclient-replaces-libmysqlclient_r/

https://superuser.com/questions/1101426/installing-libmysqlclient18-on-ubuntu-16-04?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa&newreg=9c558283c488461aaf597ef1132e4ca0