您的位置:首页 > 其它

关于链接器脚本 & makefile

2017-06-21 22:48 453 查看
对.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: