lds后缀的文件是一个linker script,是一个链接器脚本文件。它用来描述链接器要如何链接生成一个目标执行文件,一般我们在编译C语言程序时,都不会创建lds文件,那是因为libc中已经暗含了链接文件。如果我们编译一个汇编文件,那么没有加入libc库,那么就需要创建一个lds文件并且传递给ld链接器来生成可执行elf文件。
OUTPUT_FORMAT("elf32littlearm", "elf32littlearm", "elf32littlearm") ;指定输出可执行文件是elf 格式,32位ARM 指令,小端
OUTPUT_ARCH(arm) ;指定输出可执行文件的平台为ARM
ENTRY(_start) ;指定入口地址为_start标号所在的位置.
SECTIONS
{
. = 0x00000000 ; 定位器定位到从0x0位置
. = ALIGN(4) ; 代码以4字节对齐
.text: {
start.o (.text)
*(.text)
}
. = ALIGN(4)
.rodata : { *(.rodata) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.bss : {
__bss_start = .;
*(.bss)
__bss_end = .;
};
. = ALIGN(4);
_end = .;
}
解释:
-
OUTPUT_FORMAT指定输出文件格式
-
OUTPUT_ARCH指定可执行文件的平台
-
ENTRY指定开始运行点
-
*(.text) 这里的通配符表示所有文件
-
. = 0x00000000 表示定位器定位到0地址
-
. = ALIGN(4) 表示定位器定位到下一个4字节对齐的地址点
-
__bss_start = .; 定义__bss_start为当前所在的地址