Arch中使用Qt6的QtSql出现mysql driver not loaded的解决记录

发布时间 2023-08-28 19:58:57作者: 凡璞

查阅了网上的说法,出现这个错误的原因大致可能有以下几种:

  • Qt和mysql的位数不一样,一个是32位的,一个是64位的
  • Qt中自带的驱动库与所使用的版本不匹配
  • 代码写错了,比如"QMYSQL"写成了"MYSQL"

我出现个问题的原因是第二种。参考了一位老哥的博客QT Mac M1 解决 mysql driver not loaded 问题、官方文档重新编译生成。具体解决过程如下:

准备编译工具

需要提前安装好cmake和ninja,一般安装qt的时候都会一起安装了。
如果没有安装:

  • arch的小伙伴可以直接通过sudo pacman -S cmake ninja安装
  • 也可以自己通过源码构建或者下载已经构建好的二进制文件。具体参考包的官网

确认安装目录所在位置

因为我看网上有人是有下载目录和安装目录两个,防止为了搞混,还是说一下安装目录的位置
一般linux用户使用Qt自带的线上下载工具呢,安装在用户目录,也就是/home/<username>,自己选择选择位置的那就得问你自己了哦
若是使用linux发行版维护的qt呢,就可以去查看相应文档,查看文件的安装位置(arch就是安装在/usr下,对应的文件也在/usr的各个子目录中)

若是找到有点名字是qt,但是又不知道是不是安装目录的,看下图,只要是下图的组织结构的就是:

检测可用的客户端

先进入到Src目录:cd <Qt安装目录>/<版本号>/Src,例如我的就是~/Qt/6.5.2/Src
执行configure脚本,这个脚本会自动检测电脑上可用的客户端,中间会出现类似如下的输出:

...
Database options:
  -sql-<driver> ........ Enable SQL <driver> plugin. Supported drivers:
                         db2 ibase mysql oci odbc psql sqlite
                         [all auto]
  -sqlite .............. Select used sqlite [system/qt]
...

发现有自己要使用的客户端后进行下一步

检测必要的库和头文件

同样还是使用configure脚本来检测,但是还需要传入一些参数,来指定mysql/mariadb的头文件目录,以及库目录。
./configure -sql-mysql -- -DCMAKE_INCLUDE_PATH="<Mysql的include文件夹位置>" -DCMAKE_LIBRARY_PATH="<Mysql的lib库目录>",
例如我的是:
./configure -sql-mysql -- -DCMAKE_INCLUDE_PATH="/usr/include/mysql" -DCMAKE_LIBRARY_PATH="/usr/lib/mysql"

如果有报错,那就按照报错的提示去做,例如脚本告诉我我缺少LLVM,让我用LLVM_DIR参数指定其库目录,则就是:
./configure -sql-mysql -- -DCMAKE_INCLUDE_PATH="/usr/include/mysql" -DCMAKE_LIBRARY_PATH="/usr/lib/mysql" -DLLVM_DIR="usr/lib/cmake/llvm"

运行成功后差不多显示如下信息:

-- Configuring done
-- Generating done
-- Build files have been written to: ~/Qt/6.5.2/Src

编译插件

  • 先进入到sql插件目录(规范一点):cd ~/Qt/6.5.2/gcc_64/plugins/sqldrivers
  • 创建并进入build目录:mkdir build && cd build
  • 使用qt的qt-cmake进行Cmake配置:~/Qt/6.5.2/gcc_64/bin/qt-cmake -G Ninja ~/Qt/6.5.2/Src/qtbase/src/plugins/sqldrivers -DCMAKE_INSTALL_PREFIX="~/Qt/6.5.2/gcc_64" -DMySQL_INCLUDE_DIR="/usr/include/mysql" -DMySQL_LIBRARY="/usr/lib/libmariadb.so"
    没有什么问题的话,进行编译
  • cmake --build . --config Release
    没有什么问题的话就接着进行安装:
  • cmake --install .

将生成的动态库文件放到Sql驱动目录

在build目录下执行:cp build/plugin/sqldrivers/libqsqlmysql.so ./


最后重启Qt Creator再运行即可
若是想查看类似的运行效果的图片,可以去开头给出的两个链接里面去看。可以结合那两篇一起看。