1. 环境准备与架构理解
移植Qt项目从x86 Ubuntu到ARM树莓派,首先要搞清楚架构差异。x86和ARM是完全不同的指令集架构,就像中文和英文的区别,直接拿x86编译的程序放到树莓派上肯定跑不起来。我刚开始尝试时,明明编译成功了,却在树莓派上遇到"cannot execute: required file not found"的错误,折腾了半天才发现是架构不匹配的问题。
通过file命令查看可执行文件属性,你会发现x86平台编译出来的是ELF 64-bit LSB executable, x86-64,而树莓派需要的是ELF 32-bit ARM可执行文件。这种底层架构的差异决定了我们必须使用交叉编译——在x86主机上生成ARM架构的可执行文件。
树莓派Lite镜像的选择也很关键。我建议使用32位系统,因为兼容性更好,库文件更齐全。我最初用的64位系统就遇到了各种库缺失的问题,换成32位后很多问题自然解决了。镜像版本不必追求最新,稳定更重要。我用的2023-05-03版本,内核是5.10.103-v7l+,工具链是8.3.0,这个组合经过验证比较稳定。
安装必要的依赖包是基础工作:
sudo apt-get update
sudo apt-get install build-essential git libssl-dev
这些包提供了编译所需的基础工具链,缺少它们后续的交叉编译会遇到各种奇怪错误。
2. 交叉编译工具链配置
交叉编译工具链是移植的核心,它让x86主机能够生成ARM架构的可执行文件。我推荐使用arm-linux-gnueabihf工具链,这是专门为ARM硬浮点架构优化的版本。
工具链的安装有几种方式,我比较喜欢直接下载预编译的版本,省时省力。野火电子提供的build-gcc.sh脚本就很实用,它会自动下载并安装8.3.0版本的toolchain。这个版本比较成熟,兼容性好。
安装完成后需要配置环境变量,这是很多人容易忽略的一步:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/opt/gcc-arm-linux-gnueabihf-8.3.0/bin:$PATH
记得把这些配置加到~/.bashrc中,这样每次打开终端都会自动生效。
验证工具链是否安装成功:
arm-linux-gnueabihf-gcc --version
如果正确显示版本信息,说明工具链配置正确。我遇到过PATH设置错误的情况,导致找不到编译器,这时候可以用whi
329



被折叠的 条评论
为什么被折叠?



