基于MSYS2搭建Qt4.8.7-armv7交叉编译环境
使用MSYS2替代原生MinGW-w64搭建Qt 4.8.7 ARM32交叉编译环境,优势是MSYS2的包管理更便捷、依赖兼容性更强,且能完美兼容POSIX命令行环境(适配Qt 4.8.7的Unix风格编译脚本)。以下是基于MSYS2的完整实操指南,核心步骤与原生MinGW一致,但环境搭建环节适配MSYS2生态:
一、前置准备:下载清单(替换原生MinGW为MSYS2)
| 组件名称 | 用途 | 下载地址/获取方式 |
| MSYS2 | 替代原生MinGW,提供编译环境 | MSYS2官网(选Windows x86_64安装包) |
| ARM32交叉编译工具链 | 编译ARM32架构程序 | 推荐Linaro 7.5.0(arm-linux-gnueabihf):Linaro官网 |
| Qt 4.8.7源码 | Qt核心源码 | Qt Archive |
| 7-Zip | 解压压缩包 | 7-Zip官网 |
说明:MSYS2内置Python 2.7/Perl/CMake,无需单独安装,通过包管理器一键部署即可。
二、步骤1:安装并配置MSYS2
1.1 安装MSYS2
运行MSYS2安装包,默认安装到
C:\msys64(禁止修改路径含中文/空格);安装完成后自动打开MSYS2终端,执行更新命令(首次更新需耐心等待):
1 | pacman -Syu |
若终端提示“关闭后重启”,则关闭终端,重新打开MSYS2 MSYS终端,再次执行:
1 | pacman -Su |
1.2 安装MSYS2编译依赖(替代原生MinGW/Perl/Python/CMake)
打开MSYS2 MinGW64终端(关键:必须选MinGW64环境,而非MSYS环境),执行以下命令安装依赖:
1 | # 安装MinGW64 GCC(核心编译工具) |
1.3 验证MSYS2环境
在MinGW64终端执行以下命令,验证依赖安装成功:
1 | # 验证GCC |
三、步骤2:配置ARM32交叉编译工具链(适配MSYS2)
2.1 解压Linaro工具链到MSYS2路径
下载Linaro工具链(如
gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz);用7-Zip解压到MSYS2的目录下(建议路径:
C:\msys64\opt\arm-linux-gnueabihf-7.5.0),避免路径含空格/中文。
2.2 配置MSYS2环境变量(永久生效)
- 打开MSYS2 MinGW64终端,编辑环境变量配置文件:
1 | vi ~/.bashrc |
- 在文件末尾添加以下内容(指定交叉工具链路径):
1 | # ARM交叉工具链路径 |
- 生效配置:
1 | source ~/.bashrc |
2.3 验证交叉工具链
在MinGW64终端执行:
1 | arm-linux-gnueabihf-gcc -v |
输出Linaro 7.5.0版本信息则成功(若提示“找不到命令”,检查工具链解压路径是否正确)。
四、步骤3:修改Qt 4.8.7源码(与原生MinGW一致,适配MSYS2路径)
4.1 解压Qt源码到MSYS2路径
将Qt 4.8.7源码解压到MSYS2可识别的路径(如C:\msys64\home\你的用户名\qt-4.8.7-arm),MSYS2中路径表示为/home/你的用户名/qt-4.8.7-arm(避免Windows风格路径导致编译报错)。
4.2 修改交叉编译配置文件
复制并修改mkspecs配置文件(与原生MinGW步骤一致,仅路径适配MSYS2):
- 进入Qt源码目录:
1 | cd /home/你的用户名/qt-4.8.7-arm |
- 复制并修改配置文件:
1 | # 复制ARM配置模板 |
- 替换
qmake.conf内容(与原生MinGW的配置一致,工具链前缀不变):
1 | MAKEFILE_GENERATOR = UNIX |
五、步骤4:配置并编译Qt 4.8.7 ARM版本(MSYS2终端执行)
5.1 清理旧配置(首次编译可跳过)
1 | cd /home/你的用户名/qt-4.8.7-arm |
5.2 执行configure(核心:适配MSYS2路径)
1 | ./configure -prefix /home/你的用户名/qt-4.8.7-arm-build \ |
关键差异:-prefix使用MSYS2的Unix风格路径(/home/...),而非Windows路径(D:...),避免Qt配置解析路径出错。
5.3 编译Qt源码
1 | # 多核编译(-j后接CPU核心数,如8核则-j8) |
5.4 安装编译结果
1 | mingw32-make install |
安装完成后,/home/你的用户名/qt-4.8.7-arm-build(对应Windows路径C:\msys64\home\你的用户名\qt-4.8.7-arm-build)即为ARM交叉编译环境。
六、步骤5:验证交叉编译环境(MSYS2终端)
6.1 新建测试工程
在MSYS2中新建测试目录:
1 | mkdir /home/你的用户名/qt-arm-test |
新建test.pro:
1 | QT += core gui |
新建main.cpp:
1 |
|
6.2 生成Makefile并编译
1 | # 使用ARM版本的qmake |
6.3 验证ARM程序
- 安装
file命令(MSYS2终端):
1 | pacman -S file |
- 验证程序架构:
1 | file test |
输出类似test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked,说明成功。
七、MSYS2专属问题与解决
configure提示“bash: ./configure: 权限不够”:
执行
chmod +x configure赋予执行权限。编译时提示“找不到python”:
MSYS2中Python 2.7命令为
python2,Qt 4.8.7默认找python,需创建软链接:
1 | ln -s /mingw64/bin/python2.exe /mingw64/bin/python.exe |
工具链路径识别失败:
MSYS2中
/opt对应Windows路径C:\msys64\opt,确保工具链解压到该路径,且~/.bashrc中PATH配置正确。mingw32-make报错“recipe for target failed”:
降低编译核心数(如
-j4),避免内存不足;检查Qt源码路径是否含中文/空格。
总结
用MSYS2替代原生MinGW的核心优势是:
无需手动安装Python/Perl/CMake,包管理器一键部署,版本兼容性更高;
POSIX终端环境更适配Qt 4.8.7的Unix风格编译脚本,减少路径/命令兼容问题;
环境变量配置永久生效,无需频繁修改系统PATH。
核心注意点:全程使用MSYS2 MinGW64终端(而非MSYS终端/系统CMD),路径统一使用MSYS2的Unix风格路径(/home/...),避免Windows路径解析错误。