arm-none-eabi-gcc链接Cortex-R5 MCU时_vectors符号缺失问题求助
TI AM273x Cortex-R5 向量表链接定位问题解决方案
核心问题分析
你遇到的cannot find entry symbol _vectors警告,根源是链接命令参数错误加上链接顺序不合理,导致链接器无法从指定静态库中找到_vectors符号,进而无法正确应用链接脚本中的向量段映射规则。
分步修复方案
1. 修正链接路径与库名参数
当前链接命令存在两个关键错误:
- 误用编译时头文件路径参数
-I代替链接时库路径参数-L - 库名格式错误:
-l后应去掉静态库的lib前缀和.a后缀
2. 调整链接顺序
链接器按从左到右顺序处理输入文件,依赖符号的目标文件要放在提供符号的库之前,确保链接器遇到未定义符号时能从后续库中查找。
3. 确保链接脚本保留向量段
由于编译时使用了-ffunction-sections -fdata-sections(按段编译),链接器可能自动丢弃未显式引用的段。需在链接脚本中用KEEP()强制保留.vectors段:
MEMORY { R5F_VECS : ORIGIN = 0x0, LENGTH = 0x1000 /* 向量表指定地址 */ /* 其他内存区域定义 */ } SECTIONS { .vectors : { KEEP(*(.vectors)) /* 强制保留向量段,防止被垃圾收集 */ _vectors = .; /* 定义向量表入口符号 */ } > R5F_VECS /* 其他段的映射规则 */ }
4. 修正后的完整链接命令
arm-none-eabi-gcc \ -mcpu=cortex-r5 -mthumb -mfloat-abi=hard -mfpu=vfpv3-d16 \ -Wl,-Map=output.map \ -L/home/kowshik/ti/mcu_plus_sdk_am273x_08_05_00_24/source/kernel/nortos/lib/ \ -nostdlib -nostartfiles --specs=nosys.specs \ -T linker.ld \ hi.o \ -lnortos.am273x.r5f.ti-arm-clang.debug \ -o hi.elf
验证修复结果
执行以下命令确认向量表定位正确:
- 查看
_vectors符号地址:
输出应显示arm-none-eabi-nm -n hi.elf | grep _vectors00000000 T _vectors(地址为0x0) - 查看
.vectors段的分配情况:
输出中arm-none-eabi-objdump -h hi.elf.vectors段的VMA(虚拟内存地址)应为00000000,对应R5F_VECS区域。
内容的提问来源于stack exchange,提问作者kowshik
相关产品推荐
相关产品推荐

