ld链接脚本语法

本文最后更新于 2025年9月3日 下午

语法 说明
ENTRY(symbol) 将符号symbol的值作为入口地址(主函数)。ld中有多种方法指定入口地址,他们的优先级如下排列。 1. ld中的-e选项 2. 脚本中的ENTRY 3. _start符号 4. .text段第一个字节地址
STARTUP(filename) 将文件filename作为链接中的第一个输入文件
SEARCH_DIR(path) 库查找目录
INPUT(file, file, …) 将指定文件作为输入文件
INCLUDE filename 将指定文件包含进链接脚本(这是对脚本来说的,相当与在脚本中写了#include 加入其他脚本)
PROVIDE(symbol) 在链接脚本中添加某个符号
SECTIONS 确定起始地址,描述链接输出段的名称及内容

此外,最基本的命令就是定义段的SECTIONS了,它的格式为:

1
2
3
4
5
6
7
8
9
10
11
SECTIONS
{
secname : { contents }
}
secname是输出文件的对应段,contents是输入文件的段

其中contents的语法为: filename(sections)
表示要把某个文件中的某个段添加到secname中

file1.o(.data): 将file1.o的.data段添加到输出文件的对应段中
*(.data): 将所有输入文件的.data段添加到对应段中。此外,还可以使用其他正则表达式

例如:

1
2
3
4
5
6
7
8
ENTRY(nomain)//以nomain函数作为程序入口

SECTIONS
{
. = 0x08048000 + SIZEOF_HEADERS;//以这个地址作为当前虚拟地址
tinytext : {*(.text) *(.data) *(.rodata) }
/DISCARD/ : {*(.comment)}//抛弃.comment段
|


ld链接脚本语法
https://www.xinhecuican.tech/post/60b30b31.html
作者
星河璀璨
发布于
2021年8月5日
许可协议