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

DevKitPro编译GBA程序起始地址错误,如何配置gcc指定0x08000000?

问题解决方法

观测误区纠正

你当前用objdump查看的是编译阶段生成的.o目标文件,目标文件本身就是未重定位的,地址显示为0x00000000属于正常现象,最终的内存地址是链接生成.elf文件时才会确定的,你之前的验证对象有误。

你的问题核心是Makefile配置错误,导致DevKitPro预设的GBA链接规则没有生效,按以下步骤修改即可:

1. 修复CFLAGS覆盖问题

你原Makefile中先定义了带架构、优化参数的CFLAGS,后续又用:=直接赋值覆盖了所有原有配置,导致编译参数丢失:

原错误配置:

CFLAGS  :=  $(INCLUDE)

修改为追加模式:

CFLAGS  +=  $(INCLUDE)

2. 链接参数中加入GBA专用specs

你已经定义了SPECS := -specs=gba.specs,但没有将该参数加入LDFLAGS中。gba.specs是DevKitPro官方提供的GBA链接配置,内部已经预设了ROM基地址为0x08000000,不需要手动编写链接脚本。

原错误LDFLAGS配置:

LDFLAGS =   -g $(ARCH) $(INCLUDE) -Wl,-Map,$(notdir $@.map)

修改为加入SPECS参数:

LDFLAGS =   -g $(ARCH) $(SPECS) $(INCLUDE) -Wl,-Map,$(notdir $@.map)

3. 验证修改结果

重新执行make编译后,对最终生成的PaintBoyAdvance.elf执行objdump查看段地址:

arm-none-eabi-objdump -h PaintBoyAdvance.elf

此时.text段的VMA地址会显示为0x08000000开头,符合GBA卡带的地址要求。

额外优化建议

你当前代码中直接#include "bitmap.c"是错误的用法,应该将bitmap.c放到项目的source目录下,由Makefile自动编译链接,避免后续出现符号重复定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:03