WSL2 Ubuntu20.04中使用ARM交叉编译工具链时出现找不到ld的错误
解决WSL2 Ubuntu 20.04中arm-none-eabi-gcc链接时找不到'ld'的问题
你的核心问题是交叉编译工具链没有调用自身配套的ARM架构ld,反而尝试用系统x86_64的ld,两者架构不兼容,因此报错。以下是具体解决步骤:
1. 让工具链bin目录优先于系统PATH
arm-none-eabi-9工具链自带专属的arm-none-eabi-ld,必须让工具链的bin目录在PATH中优先级高于系统的/usr/bin:
- 找到工具链安装路径,比如默认解压后可能在
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin - 临时设置PATH(重启终端后失效):
export PATH=/opt/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH - 验证生效:执行
which arm-none-eabi-ld,应返回工具链bin目录下的路径,而非/usr/bin/ld
2. 检查工具链完整性
确认工具链是否缺失arm-none-eabi-ld:
- 进入工具链bin目录,执行
ls -l arm-none-eabi-ld,若文件不存在,说明解压/安装过程丢包,重新下载解压工具链 - 若文件存在,执行
chmod +x arm-none-eabi-ld确保可执行权限
3. 链接时强制指定工具链路径
如果PATH设置仍有问题,可在编译链接命令中添加-B参数指定工具链bin目录,让gcc强制使用该目录下的ld:
arm-none-eabi-gcc [你的编译参数] -B/opt/gcc-arm-none-eabi-9-2019-q4-major/bin
4. 检查nano.specs配置
你使用了-specs=nano.specs,部分情况下specs文件会硬编码ld路径:
- 找到工具链中的nano.specs文件(通常在
/opt/gcc-arm-none-eabi-9-2019-q4-major/lib/gcc/arm-none-eabi/9.2.1/specs目录下) - 打开文件搜索
ld相关配置,确保路径指向工具链自身的arm-none-eabi-ld而非系统ld
关键说明
系统的/usr/bin/ld是针对x86_64架构的链接器,无法处理cortex-m0的ARM目标文件,必须使用交叉工具链配套的arm-none-eabi-ld才能完成链接。
内容的提问来源于stack exchange,提问作者Johannesg
相关产品推荐
相关产品推荐

