You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac下Clang编译树莓派内核时链接报错:未知选项-T

解决Clang链接树莓派内核时-T选项报错的问题

问题分析

你遇到的ld: unknown options: -T错误,本质是Clang作为编译驱动时,直接使用-T会被当成Clang前端的选项,而非传递给链接器ld。虽然clang --help里显示有-T,但那是Clang对链接器选项的转发说明,实际需要通过-Wl,前缀明确告诉Clang把该选项传给链接器。

另外,你的ARMGNU变量混合了编译阶段的选项(-mcpu=cortex-a72、-Dtarget=aarch64-linux-gnu)和链接阶段的调用,这些编译选项在链接时是多余的,反而可能干扰链接器的正常工作。

解决方案

1. 拆分编译与链接的工具配置

在Makefile中分别定义编译和链接的变量,避免编译选项混入链接流程:

# 编译用的Clang(带编译阶段选项)
CC = clang -Dtarget=aarch64-linux-gnu -mcpu=cortex-a72
# 链接用的Clang(仅保留链接相关配置)
LD = clang

2. 修正链接命令的选项格式

链接时通过-Wl,-T,传递链接脚本参数,同时明确指定目标架构,确保调用正确的AArch64链接器:

$(BUILD_DIR)/kernel8.elf: $(OBJ_FILES)
	$(LD) -target aarch64-linux-gnu -Wl,-T,src/linker.ld -o $@ $^

3. 命令行测试验证

直接在命令行测试正确的链接命令,确认问题解决:

clang -target aarch64-linux-gnu -Wl,-T,src/linker.ld -o kernel8.elf test.o

替代方案:直接调用GNU链接器

如果你更倾向于使用原生GNU链接工具,可直接用交叉编译链中的aarch64-linux-gnu-ld,命令更简洁:

aarch64-linux-gnu-ld -T src/linker.ld -o kernel8.elf test.o

注意:确保系统已正确安装AArch64交叉编译工具链,否则Clang或GNU链接器可能无法找到目标架构的相关组件。

内容的提问来源于stack exchange,提问作者ebar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:52:13