交叉编译MySql(arm64平台)
目标说明
在 x86 Ubuntu 主机上交叉编译 MySQL,使其能够运行在 arm64 架构的 Ubuntu 系统中,并确保 Qt 可通过 QMYSQL 驱动调用该库。
环境准备:
- 操作系统:x86_64 架构的 Ubuntu(推荐 20.04 或 22.04)
- 目标平台:arm64 架构 Ubuntu 系统
- 工具链:
aarch64-linux-gnu-gcc
(交叉编译器)
- Qt:arm64 平台已编译好,需支持 SQL 插件
- 数据库版本:MySQL 5.7 或 8.0(也可选 MariaDB)
安装交叉编译工具链
1 2
| sudo apt update sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
获取 MySQL 源码
推荐使用 MySQL 官方源码或 MariaDB(更适合嵌入式):
下载 MySQL 5.7 示例:
1 2 3 4 5
|
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.43.tar.gz tar -xzf mysql-5.7.43.tar.gz cd mysql-5.7.43
|
或下载 MariaDB:
1 2 3
| wget https://downloads.mariadb.org/interstitial/mariadb-10.6.17/source/mariadb-10.6.17.tar.gz tar -xzf mariadb-10.6.17.tar.gz cd mariadb-10.6.17
|
设置交叉编译配置
创建安装目录
1 2 3 4
|
mkdir -p ~/arm64-rootfs/mysql export MYSQL_INSTALL_DIR=~/arm64-rootfs/mysql
|
编写交叉编译工具链文件 toolchain-arm64.cmake
1 2 3 4 5 6 7 8 9 10 11 12
|
SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_PROCESSOR aarch64)
SET(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) SET(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
编译 MySQL / MariaDB
进入构建目录并配置编译参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
mkdir build cd build
cmake .. \ -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm64.cmake \ -DCMAKE_INSTALL_PREFIX=${MYSQL_INSTALL_DIR} \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_UNIT_TESTS=OFF \ -DWITH_DEBUG=OFF \ -DWITHOUT_SERVER=ON \ -DWITHOUT_CLIENT=ON \ -DWITH_LIBMYSQL=ON
make -j$(nproc) make install
|
验证
打包传输
1 2 3
| cd ${MYSQL_INSTALL_DIR} tar -czf mysql-arm64.tar.gz * scp mysql-arm64.tar.gz user@arm64-target:/opt/
|
解压到目标系统
1 2
| cd /opt tar -xzf mysql-arm64.tar.gz
|
链接
方式一:Qt 编译时集成 MySQL 支持
1 2 3 4 5
| ./configure -opensource -confirm-license -prefix /opt/qt-arm64 \ -xplatform linux-aarch64-gnu-g++ \ -sql-mysql \ -I/path/to/mysql/include \ -L/path/to/mysql/lib
|
方式二:单独编译 Qt 的 QMYSQL 插件
1 2 3 4
| cd $QT_SRC/qtbase/src/plugins/sqldrivers qmake "INCLUDEPATH+=/opt/mysql/include" "LIBS+=-L/opt/mysql/lib -lmysqlclient" mysql.pro make make install
|
测试 Qt 程序连接数据库
1 2 3 4 5 6 7 8 9
| QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword("123456");
if (!db.open()) { qDebug() << "Failed to connect to database:" << db.lastError().text(); }
|
常见问题及解决方案
1、找不到 libmysqlclient.so
设置环境变量 LD_LIBRARY_PATH 指向该库路径
2、Qt 不识别 QMYSQL 驱动
检查插件目录中是否有 libqsqlmysql.so,可设置 QT_DEBUG_PLUGINS=1
3、编译错误 undefined reference
检查链接参数中是否正确加入 -lmysqlclient 和路径