You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译Qt5(MinGW)时MySQL驱动编译失败问题求助

解决Linux下i686-w64-mingw32交叉编译Qt5.9.4 32位Windows版MySQL驱动问题

我之前也踩过交叉编译Qt SQL驱动的类似坑,结合你的情况,给你梳理一套可行的实操步骤:

一、先确认前置条件

  • 你已经成功编译安装了qtbase-opensource-src-5.9.4(针对32位Windows的交叉编译版本)
  • 系统已安装i686-w64-mingw32交叉编译工具链
  • 准备好32位MinGW编译的MySQL库文件(划重点:绝对不能用MSVC版本的MySQL库,必须是适配MinGW的32位版本)

如果没有现成的MinGW版MySQL库,你可以自己交叉编译MySQL源码:

  1. 下载MySQL 5.x系列源码(Qt5.9.4对MySQL 8.x兼容性可能有问题,建议选5.7或5.6版本)
  2. 用i686-w64-mingw32工具链配置编译:
    mkdir mysql-build && cd mysql-build
    cmake ../mysql-source -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++ -DCMAKE_SYSTEM_NAME=Windows -DBUILD_SHARED_LIBS=ON -DWITH_SSL=OFF
    make && make install
    
    编译完成后会得到include头文件目录和lib下的libmysql.dll、libmysql.dll.a等核心文件。

二、编译Qt MySQL驱动

  1. 进入Qt源码中MySQL驱动的专属目录:
    cd qtbase-opensource-src-5.9.4/src/plugins/sqldrivers/mysql
    
  2. 设置交叉编译环境变量,确保工具链指向MinGW:
    export CC=i686-w64-mingw32-gcc
    export CXX=i686-w64-mingw32-g++
    export LD=i686-w64-mingw32-ld
    
  3. 用你交叉编译好的Qt的qmake生成Makefile,指定MySQL的头文件和库路径:
    /path/to/your/compiled-qt5.9.4/bin/qmake "INCLUDEPATH+=/path/to/mingw-mysql/include" "LIBS+=-L/path/to/mingw-mysql/lib -lmysql" mysql.pro
    
    记得替换/path/to/your/compiled-qt5.9.4为你实际的Qt安装目录,/path/to/mingw-mysql为你交叉编译得到的MySQL库目录。
  4. 编译并安装驱动:
    make
    make install
    
    执行完成后,驱动文件qsqlmysql.dll(发布版)和qsqlmysqld.dll(调试版)会被自动安装到你的Qt安装目录下的plugins/sqldrivers文件夹中。

三、验证与收尾

  1. 把MySQL库中的libmysql.dll复制到Windows程序的运行目录,或者交叉编译的Qt的bin目录下(Windows运行时必须依赖这个动态库)
  2. 编写简单的Qt测试代码验证驱动加载:
    #include <QCoreApplication>
    #include <QSqlDatabase>
    #include <QDebug>
    
    int main(int argc, char *argv[]) {
        QCoreApplication a(argc, argv);
        qDebug() << "Available drivers:" << QSqlDatabase::drivers();
        return a.exec();
    }
    
    交叉编译这个程序后放到Windows上运行,输出中应该能看到QMYSQL和QMYSQL3,说明驱动加载成功。

常见问题排查

  • 链接错误/找不到库:确认MySQL库是32位MinGW版本,LIBS路径正确,链接参数-lmysql对应MinGW的库命名规则(MinGW库文件名为libmysql.dll.a,所以用-lmysql即可)
  • qmake使用错误:必须用你交叉编译的Qt的qmake,不能用系统默认的Qt qmake,否则会生成针对Linux的Makefile
  • 头文件找不到:检查INCLUDEPATH是否指向MySQL的include目录,路径不要包含空格或特殊字符
  • Qt SQL模块未开启:编译qtbase时默认开启SQL模块,若你手动关闭了,需要重新编译qtbase并加上-sql-sqlite -sql-mysql等参数

内容的提问来源于stack exchange,提问作者N0un

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:12:32