为什么写这篇文章?
arm-none-eabi-gcc -c main.c -o main.o
arm-none-eabi-gcc main.o -specs=gba.specs -o main.elf
arm-none-eabi-objcopy -O binary main.elf main.gba
只想有一个合理的解释,不深究
1:预备
ccl、cclplus:编译器
as:汇编器
ld:连接器
objcopy:二进制转换工具
2:gcc
gcc叫做compiler driver(编译驱动程序),通过解析命令行参数,调用具体的编译器和其他工具来驱动整个编译过程。
3:问题理解
第一步:进行预处理,编译,汇编。
到这一步根据arm机器码的规则,汇编出arm cpu能知道的机器码。
第二步:链接。
有什么用?
(1):比如a.out输出helloworld,它只有#include
(2):最大疑惑-specs=filename
连接脚本(ld文件):1:链接配置符号变量的定义、入口地址、输出格式等
2:内存布局定义
MEMORY
{
rom : ORIGIN = 0x08000000,LENGTH = 32M
}
3:段链接定义
SECTIONS
{
.text :
{
...
}
}
为什么还要把elf变成bin文件可能gba没有加载器吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)