QSqlDatabase: QMYSQL driver not loaded(QT5.3)

在用qt做图形界面开发,连接数据库,显示出错:QSqlDatabase: QMYSQL driver not loaded

查找一些资料发现都是说没有安装libqsqlmysql.so,使用命令locate libsqlmysql.so发现

/home/×××/Qt5.3.2/5.3/gcc/plugins/sqldrivers/libqsqlmysql.so

/home/×××/Qt5.3.2/Tools/QtCreator/bin/plugins/sqldrivers/libqsqlmysql.so
说明已经安装,但是还是编译出现上述错误。


进入到/home/×××/Qt5.3.2/5.3/gcc/plugins/sqldrivers/执行:

ldd libqsqlmysql.so(ldd用来打印程序或者库文件所依赖的共享库列表)

显示:

 
 
ldd命令用于打印程序或者库文件所依赖的共享库列表

Linux命令大全:http://man.linuxde.net/ldd

ldd命令用于打印程序或者库文件所依赖的共享库列表

Linux命令大全:http://man.linuxde.net/ldd

dd命令用于打印程序或者库文件所依赖的共享库列表。

Linux命令大全:http://man.linuxde.net/l

    linux-gate.so.1 =>  (0xb77d7000)
    libmysqlclient_r.so.16 => not found
    libQt5Sql.so.5 => /home/**/Qt5.3.2/5.3/gcc/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0xb776a000)
    libQt5Core.so.5 => /home/**/Qt5.3.2/5.3/gcc/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0xb722e000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb7145000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6f96000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6f7a000)
    libicui18n.so.52 => /home/**/Qt5.3.2/5.3/gcc/plugins/sqldrivers/./../../lib/libicui18n.so.52 (0xb6d50000)
    ........

第二行有错误显示not found。

解决方法一:

搜索libmysqlclient_r.so有个/usr/lib/i386-linux-gnu/下有个libmysqlclient.so.18,将其改成libmysqlclient_r.so.16,重新执行ldd命令,这时显示正确。


解决方法二:

建立16到18的一个软链接。


解决方法三:

上面的方法是治标不治本的。之所以找不到.so.16是因为在安装qt5.3时把.so.16 给更新成18了。需要重新编译生成libsqlmysql.so,使其依赖于libmysqlclient_r.so.18。

(1)

下载最新的qt源码包(该包命名为qt-everywhere-opensource-src-version.tar.gz)

(2)

解压,然后进入qtbase/src/plugins/sqldrivers/mysql/目录

(3)

执行qmake

(4)

执行make

(5)

在qtbase/plugins/sqldrivers/ 目录下会生成正确的libsqlmysql.so,将其拷贝到/home/××/Qt5.3.2/5.3/gcc/plugins/sqldrivers


重新执行下ldd libsqlmysql.so,

linux-gate.so.1 =>  (0xb76fa000)
    libmysqlclient.so.18 => /usr/lib/i386-linux-gnu/libmysqlclient.so.18 (0xb73a9000)
    libQt5Sql.so.5 => /home/mahuixin/Qt5.3.2/5.3/gcc/lib/libQt5Sql.so.5 (0xb7368000)
    libQt5Core.so.5 => /home/mahuixin/Qt5.3.2/5.3/gcc/lib/libQt5Core.so.5 (0xb6e2c000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6d43000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6b94000)
    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6b7a000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6b75000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6b58000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b12000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6af5000)
    libicui18n.so.52 => /home/mahuixin/Qt5.3.2/5.3/gcc/lib/libicui18n.so.52 (0xb68cb000)



如果还有错误:

QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins

是因为Qt不知道plugins的所在目录。


解决方法:

在用到数据库之前添加代码QCoreApplication::addLibraryPath("path");

其中的"path"可以替换为实际plugins所在的目录(plugins下级存在sqldrivers目录,该目录下的so为QSqlDatabase实际需要的library。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值