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

Makefile编译HOST及MSP432平台时链接.o文件报program headers空间不足错误

报错原因
  • 你的Makefile没有对链接参数做平台区分,不管是HOST(x86架构)还是MSP432(ARM架构),都强制使用了MSP432专用的msp432p401r.lds链接脚本。x86平台的ld无法识别ARM架构单片机的内存布局规则,直接导致程序段空间分配失败。
  • 即使是MSP432平台,部分版本的arm-none-eabi-ld在链接小型嵌入式程序时,默认的页对齐规则也可能导致程序头空间不足,触发同类报错。
修复步骤
  1. 调整Makefile的条件分支,将LDFLAGS按平台拆分,HOST平台不加载MSP432的链接脚本,修改后的平台判断部分代码如下:
ifeq ($(PLATFORM),HOST)
    CC = gcc 
    CFLAGS = -DHOST  
    LD = ld
    # HOST平台用默认链接规则,不需要指定单片机的lds文件
    LDFLAGS = -Wl,-Map=$(TARGET).map
else 
    CC = arm-none-eabi-gcc
    CFLAGS = -DMSP432 -mcpu=$(CPU) -march=$(ARCH) --specs=$(SPECS)  -mfloat-abi=hard -mfpu=fpv4-sp-d16 
    LD = arm-none-eabi-ld
    # 只有MSP432平台加载对应链接脚本,添加-N参数解决程序头空间不足问题
    LDFLAGS = -Wl,-Map=$(TARGET).map -N -T ../msp432p401r.lds
endif

记得删除原来全局定义的LDFLAGS = -Wl,-Map=$(TARGET).map -T ../msp432p401r.lds这行代码,避免参数冲突。

  1. 执行make clean清理所有之前编译生成的.o、.out、.map等中间文件,避免旧缓存影响编译结果。

  2. 重新执行对应平台的编译命令即可正常生成目标文件:

  • HOST平台:make build PLATFORM=HOST
  • MSP432平台:make build PLATFORM=MSP432

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:54:04