马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
嵌入式开发绕不开交叉编译:在 x86 的 Ubuntu 上编译出能在 ARM 板子上跑的程序。这时候就需要交叉编译工具链,ARM-Linux-gcc 是最常见的一套。装它本身不难,难在装完之后「命令找不到」这个问题,几乎每个人都会遇到一次。本文把原理、安装、环境变量配置一次讲透。
一、什么是交叉编译工具链
交叉编译工具链是一组用于「在一种平台上编译出运行在另一种平台上的程序」的工具集合。ARM-Linux-gcc 就是为 ARM 架构的 Linux 系统开发软件而设计的工具链,它包含编译器、汇编器、链接器以及与目标平台匹配的 C 库。
换句话说:编译器跑在你的开发机上,但它生成的可执行文件是给 ARM 板子用的。这也是为什么不能直接用系统自带的 gcc——架构指令集不一样。
二、先确认当前环境
arm-linux-gcc -v
如果提示 command not found,说明系统里还没有这套工具链,可以往下装。如果能看到版本信息,说明已经装过了,直接跳到验证环节。
三、两种安装方式
方式一:apt 安装(简单,但版本不可控)
Ubuntu 源里就有交叉编译工具链,直接装:
sudo apt update
sudo apt install gcc-arm-linux-gnueabi
优点是省事,缺点是版本由源决定,可能与你的板子或 SDK 要求不一致。做产品开发时,工具链版本通常要和 SDK 严格对齐,所以更常见的是方式二。
方式二:手工解压官方提供的工具链
- 从板子厂商或工具链官方渠道获取压缩包(通常是 .tar.bz2 格式),别用来路不明的第三方打包版本——工具链会参与最终固件的生成,属于供应链上的关键环节。
- 拷到 Ubuntu 上,解压到用户目录下:
sudo tar -jxvf 工具链文件.tar.bz2 -C /opt/toolchain
- 解压后可以看到 bin 目录,arm-linux-gcc 就在里面。
四、配环境变量,解决「命令找不到」
只解压不配路径,命令行里是敲不出来的。编辑环境变量文件:
sudo vim /etc/environment
参照文件里已有的格式,把工具链 bin 目录加到路径里,例如在 PATH 那一行末尾追加:
:/opt/toolchain/gcc-arm/bin
保存后让它生效(这里有两种方式):
source /etc/environment
注意 /etc/environment 属于系统级配置,当前 shell 需要重新登录或 source 才生效。更推荐的做法是写到 /etc/profile.d/ 下建一个 .sh 文件,这样对登录 shell 更友好。
顺便说个整理技巧:解压出来的文件夹名通常又长又乱,可以重命名成短名字:
mv 原始名称 arm-linux-gcc
重命名后记得同步改环境变量里的路径,否则又会找不到命令。
五、验证安装
arm-linux-gcc -v
arm-linux-gcc --version
能打印出工具链版本、目标架构(target 字段会显示类似 arm-linux 或 arm-none-eabi),就说明路径配对了。进一步验证可以编一个最小程序:
echo 'int main(){return 0;}' > t.c
arm-linux-gcc t.c -o t
file t
file 的输出里应该显示 ARM 或 32-bit LSB executable, ARM,这才能证明它真的在交叉编译,而不只是名字叫 arm 而已。
六、让命令更好用:建软链接
有些工具链的二进制名很长(带版本号和 target 前缀),每次敲很累。可以在 /usr/local/bin 下建软链接:
sudo ln -s /opt/toolchain/gcc-arm/bin/arm-linux-gnueabihf-gcc /usr/local/bin/armgcc
以后直接敲 armgcc 即可。ln -s 目标 链接名 的顺序别写反,写反了会报软链接层数过多。
七、常见问题
- 报 No such file or directory 却是文件明明存在:多半是 32 位工具链跑在 64 位系统上缺 32 位运行库,装 libc6:i386 及对应依赖。
- 编译时报找不到头文件:目标平台的 sysroot 没配,需要在编译命令里加 --sysroot= 指向工具链自带的系统根。
- 链接时报找不到 -lc:工具链与目标板上的库版本不匹配,这种情况要换回与 SDK 一致的工具链版本。
- source /etc/environment 后新开终端又失效:说明改的不是当前用户 shell 读的文件,转到 ~/.bashrc 或 /etc/profile.d/ 里再配一次。
qidao123.com企服评测-应用市场 编辑提示
|