1. 为什么你需要一个aarch64交叉编译环境?
如果你正在玩树莓派、玩各种ARM开发板,或者在做一些嵌入式Linux的开发,那你肯定遇到过这个场景:你的主力电脑是x86_64的(就是咱们常见的Intel或者AMD的CPU),但你要运行程序的设备,比如一个性能不错的ARM服务器或者一个小巧的嵌入式板子,它的CPU架构是aarch64(也就是ARM 64位)。直接在板子上编译程序?那体验可能有点“酸爽”——资源有限,编译个稍微大点的项目,等得花儿都谢了。
这时候,交叉编译就是你的“神兵利器”。简单说,就是在你的高性能x86电脑上,配置一套专门为ARM设备生成代码的编译器工具,编译出来的程序直接拷贝到ARM设备上就能跑。这效率提升可不是一点半点。我自己在给客户部署边缘计算应用时,就全靠这套环境,本地调试、快速迭代,省下了大把时间。
今天,我就带你从零开始,在Ubuntu系统上,手把手搭建一套稳定、好用的aarch64交叉编译环境。我们不光要装上工具链,还要解决安装过程中常见的依赖问题,最后用CMake这个强大的构建工具,把整个跨平台编译流程自动化。无论你是嵌入式开发新手,还是想优化现有工作流的老手,这篇指南都能让你少踩很多坑。
2. 第一步:安装与配置交叉编译工具链
万事开头难,但配置工具链这一步,我们把它拆解清楚,其实一点也不复杂。核心就是找到对的“武器”(编译器),并把它准备好。
2.1 选择合适的工具链版本
在Ubuntu的仓库里,其实已经为我们准备了不少现成的交叉编译工具链。第一步,我们先看看“武器库”里都有啥。
打开你的终端,输入以下命令:
apt-cache search aarch64
你会看到一长串列表,里面包含 gcc-aarch64-linux-gnu、g++-aarch64-linux-gnu 以及它们带具体版本号的分支,比如 gcc-5-aarch64-linux-gnu、gcc-7-aarch64-linux-gnu 等等。这里有个关键点:带数字版本号的包(如gcc-9-aarch64-linux-gnu)是具体的编译器版本,而不带数字的包(gcc-aarch64-linux-gnu)是一个“元包”,它会自动指向仓库中默认的或最新的版本。
对于新手,我建议先安装带具体版本号的工具链,比如gcc-9或gcc-10的版本,因为它们相对较新,对C++17/20等现代语言特性支持更好,社区资源也丰富。但为了和很多现有教程、项目兼容(有时老项目需要特定版本的编译器),我们也需要知道如何安装特定版本。
假设我们决定安装gcc-9版本,命令如下:
sudo apt-get install gcc-9-aarch64-linux-gnu g++-9-aarch64-linux-gnu
注意: 这里我一次性安装了gcc和g++。gcc是C语言编译器,g++是C++编译器。交叉编译C++项目,两者通常都需要。
2.2 解决恼人的依赖问题
安装过程中,你很可能会遇到一个经典错误:“您也许需要运行 ‘apt --fix-broken install’ 来修正上面的错误。” 别慌,这几乎是Ubuntu安装交叉编译工具的“保留节目”。
这是因为在安装这些特定版本的工具链时,系统可能会尝试安装或更新一些相关的依赖库,但不同包之间的依赖关系没有完全满足,导致安装中断。这时候,按照提示执行修复命令就行:
sudo apt --fix-broken install
这个命令会尝试自动修复破损的依赖关系。它可能会卸载一些冲突的包,也可能会安装缺失的包。执行完成后,再次运行之前的安装命令,通常就能顺利完成了。
2.3 安装“无版本”符号链接
安装完特定版本后,你会发现系统中并没有一个叫 aarch64-linux-gnu-gcc 的简单命令。你只有 aarch64-linux-gnu-gcc-9。这


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



