c文件编译-specs=

为什么写这篇文章?

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>,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没有加载器吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
arm-none-eabi-gcc -o "SENSOR_CB.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\Users\WangBingqian\Desktop\SC10L151Cube\trunk\NO_FOTA_VERSION\STM32L151CBTXA_FLASH.ld" --specs=nosys.specs -Wl,-Map="SENSOR_CB.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group Core/Src/rs485.o: In function `get_sample_data_max_min_value': rs485.c:(.text.get_sample_data_max_min_value+0x0): multiple definition of `get_sample_data_max_min_value' Core/Src/lora_wan.o:lora_wan.c:(.text.get_sample_data_max_min_value+0x0): first defined here Core/Src/rs485.o: In function `computeMvScale': rs485.c:(.text.computeMvScale+0x0): multiple definition of `computeMvScale' Core/Src/lora_wan.o:lora_wan.c:(.text.computeMvScale+0x0): first defined here Core/Src/rs485.o: In function `computeMvScale_f': rs485.c:(.text.computeMvScale_f+0x0): multiple definition of `computeMvScale_f' Core/Src/lora_wan.o:lora_wan.c:(.text.computeMvScale_f+0x0): first defined here Core/Src/rs485.o: In function `generate_frag_data': rs485.c:(.text.generate_frag_data+0x0): multiple definition of `generate_frag_data' Core/Src/lora_wan.o:lora_wan.c:(.text.generate_frag_data+0x0): first defined here Core/Src/rs485.o:(.bss.frag_num+0x0): multiple definition of `frag_num' Core/Src/lora_wan.o:(.bss.frag_num+0x0): first defined here collect2.exe: error: ld returned 1 exit status make: *** [makefile:50: SENSOR_CB.elf] Error 1 "make -j4 all" terminated with exit code 2. Build might be incomplete.是什么错误
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值