关于链接器脚本 & makefile

对.c文件进行编译不链接会产生.o文件,用生成elf可执行文件必须用链接器把一堆灰互相调用的.o文件链接起来
这里就用到了链接器脚本
固定格式
OUTPUT_ARCH(arm)
ENTRY(_start) (指明起始地址)
SECTIONS {
. = 0x50008000; (.表示当前地址,每次程序开始都要给当前地址赋值,在BL里面就可以,这里选择内存起始不久处0x50008000)
. = ALIGN(4); (确保4字节对齐)
.text :
{
start.o (.text) (指明start.o在最前面,CPU上电就执行对应start.o的程序)
*(.text)
}

. = ALIGN(4);
.data : 
{
*(.data)
}
. = ALIGN(4);
.bss : 
{
*(.bss) 
}
}



这样就可以调用这个链接器脚本来实现几个.o文件的链接了,可以再makefile里面“规则”一下
all: start.o mem.o main.o (最终目标和依赖)
arm-linux-ld -Tgboot.lds -o gboot.elf $^ (链接这些.o文件,用gboot.lds这个链接器脚本,使用start.o,mem.o,main.o所有依赖)
arm-linux-objcopy -O binary gboot.elf gboot.bin (把ELF文件编写成.bin二进制arm可执行的文件)
%.o : %.S       (所有.o文件都可以由对应的.S文件编译得到)
arm-linux-gcc -g -c $^ (只编译不链接)
%.o : %.c  (所有.o文件都可以由对应的.c文件编译得到)
arm-linux-gcc -g -c $^
.PHONY: clean
clean: (清除以上编译产生的.o,.elf..bin文件)
rm *.o *.elf *.bin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值