Fedora 27 64位系统Qt应用QMYSQL驱动未加载问题求助
解决Fedora 27上Qt应用无法加载QMYSQL驱动的问题
我之前在Fedora 27 64位系统上碰到过几乎一模一样的问题,折腾了好一阵才搞定,给你几个针对性的排查和解决步骤:
1. 先确认Qt的MySQL驱动文件及依赖是否正常
首先找到Qt的SQL驱动目录,默认路径一般是/usr/lib64/qt5/plugins/sqldrivers/,进去检查是否存在libqsqlmysql.so文件:
ls /usr/lib64/qt5/plugins/sqldrivers/libqsqlmysql.so
如果文件存在,用ldd命令检查它的依赖库是否有缺失:
ldd /usr/lib64/qt5/plugins/sqldrivers/libqsqlmysql.so
重点看输出里有没有libmysqlclient.so或libmariadb.so相关的条目,如果显示not found,那就是依赖缺失导致驱动加载失败。
2. 补全依赖或重新编译Qt的MySQL驱动
情况一:依赖缺失
Fedora 27默认用MariaDB替代MySQL,所以优先安装MariaDB的开发包:
sudo dnf install mariadb-connector-c-devel mariadb-libs
如果你确实用的是官方MySQL,就安装MySQL的开发包:
sudo dnf install mysql-community-devel mysql-community-libs
情况二:驱动本身损坏或不兼容
如果依赖没问题但驱动还是加载失败,就重新编译Qt的MySQL驱动:
- 先安装Qt的开发依赖:
sudo dnf install qt5-qtbase-devel qt5-qtbase-private-devel
- 进入Qt源码的MySQL驱动目录(如果没源码,先安装
qt5-qtbase-src包):
cd /usr/src/qt5/qtbase/src/plugins/sqldrivers/mysql/
- 用qmake配置编译参数(根据你用的是MySQL还是MariaDB调整路径):
# MariaDB版本 qmake "INCLUDEPATH=/usr/include/mariadb" "LIBS=-L/usr/lib64/mariadb -lmariadb" # MySQL版本 qmake "INCLUDEPATH=/usr/include/mysql" "LIBS=-L/usr/lib64/mysql -lmysqlclient"
- 编译并安装:
make && sudo make install
3. 检查环境变量是否正确配置
确保Qt能找到插件目录,MySQL库能被系统加载:
# 临时设置,仅当前终端有效 export QT_PLUGIN_PATH=/usr/lib64/qt5/plugins/ export LD_LIBRARY_PATH=/usr/lib64/mysql:/usr/lib64/mariadb:$LD_LIBRARY_PATH
如果要永久生效,把这两行加到~/.bashrc或~/.zshrc里,然后重新登录终端。
4. 用测试程序验证驱动
写个极简的Qt程序测试连接,能得到更详细的错误信息:
#include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Available drivers:" << QSqlDatabase::drivers(); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("你的数据库名"); db.setUserName("你的用户名"); db.setPassword("你的密码"); if (db.open()) { qDebug() << "数据库连接成功!"; db.close(); } else { qDebug() << "连接失败:" << db.lastError().text(); } return a.exec(); }
编译运行后,根据输出的具体错误再针对性调整。
内容的提问来源于stack exchange,提问作者TSG




