解决CENTOS6.5下利用Qt5.6默认提供的libqsqlmysql.so连接Mysql提示“QMYSQL driver not loaded”的问题

环境说明

系统:CENTOS6.5 bit64
Qt版本:5.6
Mysql:5.6

问题描述

连接数据库的代码块如下:

bool mysqlOperate::ConnectDataBase()
{

    if(QSqlDatabase::contains("mysql"))
    {
         m_db = QSqlDatabase::database("mysql");
    }
    else
    {
        m_db = QSqlDatabase::addDatabase("QMYSQL","mysql");
    }

    m_db.setHostName(m_HostName);
    m_db.setDatabaseName(m_DatabaseName);
    m_db.setUserName(m_UserName);
    m_db.setPassword(m_Password);
    if(!m_db.isOpen())
    {
        if(!m_db.open())
        {
            qDebug()<<"open database fail:";//<< m_db.lastError();
            return false ;
        }
    }

    //qDebug()<<"open database sucess!";

    return true ;

}

报错信息如下:

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

报错信息的大意是:mysql的驱动没有找到,但是支持的驱动有QSQLITE QMYSQL QMYSQL3
而我已经将libqsqlmysql.so放到usr/lib64/下了

解决过程

查找是否有mysql的库

[root@ViGap home]# find / -name libmysql*
/int/soft/mysql5.6.17/lib/libmysqlclient_r.a
/int/soft/mysql5.6.17/lib/libmysqlclient.so.18.1.0
/int/soft/mysql5.6.17/lib/libmysqld.a
/int/soft/mysql5.6.17/lib/libmysqlclient.a
/int/soft/mysql5.6.17/lib/libmysqlclient.so
/int/soft/mysql5.6.17/lib/libmysqld-debug.a
/int/soft/mysql5.6.17/lib/libmysqlclient.so.18
/int/soft/mysql5.6.17/lib/libmysqlservices.a
/int/soft/mysql5.6.17/lib/libmysqlclient_r.so
/int/soft/mysql5.6.17/lib/libmysqlclient_r.so.18.1.0
/int/soft/mysql5.6.17/lib/libmysqlclient_r.so.18
/int/bin/sqldrivers/libmysqlclient.so
/int/bin/sqldrivers/libmysqlclient_r.so

于是建立软连接
将/int/soft/mysql5.6.17/lib/libmysqlclient.so.18 软连接至/usr/lib64中
仍然不起作用

查询libqsqlmysql.so的依赖库

[root@ViGap home]# ldd /lib64/libqsqlmysql.so 
ldd: warning: you do not have execution permission for `/lib64/libqsqlmysql.so'
        linux-vdso.so.1 =>  (0x00007ffcba3f7000)
        libQt5Sql.so.5 => /lib64/libQt5Sql.so.5 (0x00007fc249c03000)
        libQt5Core.so.5 => /lib64/libQt5Core.so.5 (0x00007fc2493e1000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc2491c5000)
        libmysqlclient.so.20 => not found
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc248ebe000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fc248bbc000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc2489a6000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fc2485d8000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fc2483d4000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fc2481cc000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc24a05c000)

可以看出来qt的mysql插件库所依赖的mysql动态库版本是libmysqlclient.so.20,网上查了下,包含libmysqlclient.so.20库的mysql版本是5.7,于是去mysql官网下载对应的rpm本地安装包

我已经下载好,安装包提供给大家
整理好的rpm包链接

下载安装包有2个互相依赖

mysql-community-common-5.7.30-1.el6.x86_64.rpm
mysql-community-libs-5.7.30-1.el6.x86_64.rpm

rpm安装方式就地安装即可

rpm -ivh mysql-community-libs-5.7.30-1.el6.x86_64.rpm mysql-community-common-5.7.30-1.el6.x86_64.rpm 

安装完成后,再次执行ldd命令可以看到

[root@ViGap home]# ldd /lib64/libqsqlmysql.so 
ldd: warning: you do not have execution permission for `/lib64/libqsqlmysql.so'
        linux-vdso.so.1 =>  (0x00007ffdc0bc1000)
        libQt5Sql.so.5 => /lib64/libQt5Sql.so.5 (0x00007fe990b6e000)
        libQt5Core.so.5 => /lib64/libQt5Core.so.5 (0x00007fe99034c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe990130000)
        libmysqlclient.so.20 => /usr/lib64/mysql/libmysqlclient.so.20 (0x00007fe98f91e000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fe98f617000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fe98f315000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe98f0ff000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fe98ed31000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fe98eb2d000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fe98e925000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe990fc7000)

已经能够找到依赖库了

libmysqlclient.so.20 => /usr/lib64/mysql/libmysqlclient.so.20 (0x00007fe98f91e000)

再次运行程序,报错消失。

总结

当再次遇到类似的问题时候,我们需要查看下libqsqlmysql.so 的依赖关系,从而才能知道具体需要哪个版本的mysqlclient库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值