搭建Qt4.8.7-armv7交叉编译环境
在Windows 10中搭建Qt 4.8.7 ARM32交叉编译环境,核心是获取ARM32交叉编译工具链、编译Qt 4.8.7源码适配ARM架构、配置环境变量与编译规则,以下是分步实操指南(全程需管理员权限,建议关闭杀毒软件避免文件拦截)。
一、前置准备:确定核心依赖与下载清单
Qt 4.8.7本身不提供预编译的ARM32交叉编译包,需手动编译源码,需下载以下组件(版本需严格匹配,避免兼容性问题):
| 组件名称 | 用途 | 下载地址/获取方式 |
| MinGW-w64(8.1.0) | Windows下的GCC编译环境 | SourceForge(选x86_64-posix-seh) |
| ARM32交叉编译工具链 | 编译ARM32架构程序 | 推荐Linaro 7.5.0(arm-linux-gnueabihf):Linaro官网 |
| Qt 4.8.7源码 | Qt核心源码(需适配ARM) | Qt Archive |
| Python 2.7.x | Qt 4.8.7编译依赖(必须2.7) | Python官网(选Windows x86-64 MSI) |
| Perl 5.28+ | Qt编译脚本依赖 | Strawberry Perl(选64位版本) |
| CMake 3.10+ | 辅助编译(可选但建议) | CMake官网(选Windows x64 Installer) |
| 7-Zip | 解压tar.gz/压缩包 | 7-Zip官网 |
二、步骤1:安装基础编译环境(Windows侧)
1.1 安装MinGW-w64
下载MinGW-w64后解压到固定路径(如
D:\mingw64),将D:\mingw64\bin添加到系统环境变量Path(优先级高于系统自带MinGW)。验证:打开CMD,输入
gcc -v,输出MinGW-w64 8.1.0版本信息则成功。
1.2 安装Python 2.7 + Perl + CMake
Python 2.7:安装时勾选“Add Python to PATH”,验证
python --version输出2.7.x。Strawberry Perl:默认安装即可,验证
perl -v输出5.28+版本。CMake:安装时勾选“Add CMake to the system PATH for all users”,验证
cmake --version输出3.10+。
三、步骤2:配置ARM32交叉编译工具链
2.1 解压并配置Linaro工具链
下载Linaro工具链(如
gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz),解压到固定路径(如D:\arm-linux-gnueabihf-7.5.0)。将工具链
bin目录(D:\arm-linux-gnueabihf-7.5.0\bin)添加到系统环境变量Path。验证:CMD输入
arm-linux-gnueabihf-gcc -v,输出Linaro 7.5.0版本信息则成功。
四、步骤3:修改Qt 4.8.7源码适配ARM交叉编译
Qt 4.8.7默认不支持Windows下ARM交叉编译,需手动修改配置文件:
4.1 解压Qt源码
将qt-everywhere-opensource-src-4.8.7.tar.gz用7-Zip解压到固定路径(如D:\qt-4.8.7-arm),避免路径含中文/空格。
4.2 修改交叉编译配置文件
Qt 4.8.7的交叉编译需通过mkspecs目录下的配置文件定义,步骤:
复制
D:\qt-4.8.7-arm\mkspecs\qws\linux-arm-gnueabi-g++目录,重命名为linux-arm-gnueabihf-g++(匹配Linaro工具链的hf(硬件浮点))。编辑新目录下的
qmake.conf,替换内容为:
1 | # 基础配置 |
注:
-march=armv7-a/-mtune=cortex-a9需根据目标ARM芯片调整(如ARMv6则改-march=armv6)。
五、步骤4:配置并编译Qt 4.8.7 ARM版本
5.1 生成编译配置(关键:避免Qt默认编译Windows版本)
打开MinGW-w64的CMD窗口(必须用MinGW的终端,而非系统CMD),执行以下命令:
1 | # 进入Qt源码根目录 |
参数说明:
-prefix:指定Qt ARM版本安装路径;-embedded arm:启用嵌入式ARM支持(Qt 4的QWS);-xplatform:指定步骤4.2中修改的交叉编译配置;禁用
webkit/phonon等非必需模块,减少编译时间和报错。
5.2 编译Qt源码
配置成功后(无error),执行编译命令:
1 | # 多核编译(-j后接CPU核心数,如8核则-j8) |
⚠️ 编译耗时(1-2小时),若报错:
检查工具链路径是否正确;
检查
qmake.conf中工具链前缀是否匹配;若提示“python找不到”,确保Python 2.7在PATH最前(Qt 4不兼容Python 3)。
5.3 安装编译后的Qt ARM版本
编译完成后执行:
1 | mingw32-make install |
安装完成后,D:\qt-4.8.7-arm-build即为可用于ARM32交叉编译的Qt环境。
六、步骤5:验证交叉编译环境
编写简单Qt测试程序,验证能否编译出ARM32可执行文件:
6.1 新建测试工程
在任意目录新建test.pro:
1 | QT += core gui |
新建main.cpp:
1 |
|
6.2 用Qt ARM版本的qmake生成Makefile
打开MinGW终端,执行:
1 | # 指定ARM版本的qmake路径 |
6.3 编译生成ARM32程序
执行:
1 | mingw32-make |
编译完成后生成test可执行文件,用file命令(需安装Git for Windows,或复制到Linux)验证:
1 | # Git Bash中执行 |
输出类似test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked,说明成功生成ARM32程序。
七、常见问题与解决
configure阶段提示“无法找到arm-linux-gnueabihf-gcc”:
检查工具链
bin目录是否在PATH中,重启终端生效;确认工具链解压完整,无文件缺失。
编译阶段提示“undefined reference to xxx”:
禁用非必需模块(如webkit),Qt 4.8.7部分模块对ARM交叉编译支持差;
检查
qmake.conf中链接库参数(QMAKE_LIBS)是否完整。
Python版本错误:
- 卸载Python 3,仅保留Python 2.7,或在PATH中优先放置Python 2.7路径。
总结
Win10下Qt 4.8.7 ARM32交叉编译的核心是:
搭建MinGW+ARM交叉工具链环境;
修改Qt源码的交叉编译配置文件;
通过configure指定ARM编译参数,编译源码;
验证生成的程序为ARM32架构。
若追求效率,也可在Linux虚拟机中完成Qt 4.8.7 ARM交叉编译(Linux下交叉编译兼容性更好),再将编译结果复制到Windows使用。