关于链接器脚本 & 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
这里就用到了链接器脚本
固定格式
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
相关文章推荐
- shell 脚本中关于用户输入参…
- net 与 javascript脚本的几种交互方法
- HTML字符实体(关于 ><等)
- 关于and or的优先级的一个小问题
- 关于安装VISIO 2007报错office.zh-…
- 关于SQL SERVER 2005报错"性能监视…
- 关于文本框显示&nbsp问题
- 跟我一起写 Makefile
- 关于dispatchers 各版本对比,及Re…
- 关于如何在startup时 使用spfile
- 关于SQL SERVER 2008安装时出现不…
- 奇怪的编码,奇怪的显示——一个关于 的故事
- orainstroot.sh 脚本
- 实验1 :关于FLASHBACK DATABASE …
- 关于 adding a new disk or removi…
- Javascript公共脚本库系列(二): 添…
- HTML字符实体(关于 ><等)
- 关于A/B testing的三篇博文,…
- 关于Flex的MessageBroker End…
- 关于SQL SERVER 2008从suspect状态…