c文件编译-specs=

c文件编译-specs=,第1张

为什么写这篇文章?

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,stdio.h里面只有printf函数声明,没有printf的具体实现,那么a.out是怎么知道printf是怎样实现的呢?

(2):最大疑惑-specs=filename

连接脚本(ld文件):

1:链接配置符号变量的定义、入口地址、输出格式等

2:内存布局定义

MEMORY

{

rom : ORIGIN = 0x08000000,LENGTH = 32M

}

3:段链接定义

SECTIONS

{

        .text :

        {

               ...

        }

}

为什么还要把elf变成bin文件

可能gba没有加载器吧

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存