在一些老的连接脚本上,你有时会看到'[COMMON]'。这个符号现在已经过时了, 它等效于'*(COMMON)'。
输入节和垃圾收集
当连接时垃圾收集正在使用中时('--gc-sections'),这在标识那些不应该被排除在外的节时非常有用。这
接下来的例子是一个完整的连接脚本。它告诉连接器去读取文件'all.o'中的所有节,并把它们放到输出节
‘BYTE’,‘SHORT’,‘LONG’‘QUAD’命令分别存储一个,两个,四个,八个字节。存入字节后,定位计
比如,下面的命令会存入一字节的内容1,后面跟上四字节,其内容是符号'addr'的值。
当使用64位系统时,‘QUAD’和‘SQUAD’是相同的;它们都会存储8字节,或者说是64位的值。而如果软硬件
如果输出文件的目标文件格式有一个显式的endianness,它在正常的情况下,值就会被以这种endianness存储
注意, 这些命令只在一个节描述内部才有效,而不是在它们之间, 所以,下面的代码会使连接器产生一个错
而这个才是有效的:
你可能使用‘FILL’命令来为当前节设置填充样式。它后面跟有一个括号中的表达式。任何未指定的节内内存
这个例子显示如何在未被指定的内存区域填充'0x90':
‘FILL’命令跟输出节的‘=FILLEXP’属性相似,但它只影响到节内跟在‘FILL’命令后面的部分,而不是
有两个关键字作为输出节命令的形式出现。
这个命令一直是a.out目标文件格式特有的。 它一般不为其它的目标文件格式所使用。
对于像‘COFF’或‘ELF’这样支持专有节名的目标文件格式,GNU C++通常会把全局构造函数与析构
如果你正使用GNU C++支持来进行优先初始化,那它提供一些可以控制全局构造函数运行顺序的功能,
通常,编译器和连接器会自动处理这些事情,并且你不必亲自关心这些事情。但是,当你正在使用
输出节的丢弃。
连接器不会创建那些不含有任何内容的输出节。这是为了引用那些可能出现或不出现在任何输入文件中的输入
如果至少在一个输入文件中有'.foo'节,它才会在输出文件中创建一个'.foo'节
如果你使用了其它的而不是一个输入节描述作为一个输出节命令,比如一个符号赋值,那这个输出节总是被
一个特殊的输出节名`/DISCARD/'可以被用来丢弃输入节。任何被分配到名为`/DISCARD/'的输出节中的输入
上面,我们已经展示了一个完整的输出节描述,看下去就象这样:
每一个输出节可以有一个类型。类型是一个放在括号中的关键字,已定义的类型如下所示:
连接器通常基于映射到输出节的输入节来设置输出节的属性。你可以通过使用节类型来重设这个属性,
每一个节有一个虚地址(VMA)和一个载入地址(LMA);出现在输出节描述中的地址表达式设置VMS
连接器通常把LMA跟VMA设成相等。你可以通过使用‘AT’关键字改变这个。跟在关键字‘AT’后面的表达式
这个特性是为了便于建立ROM映像而设计的。比如,下面的连接脚本创建了三个输出节:一个叫做‘.text’
这个连接脚本产生的程序使用的运行时初始化代码会包含象下面所示的一些东西,以把初始化后的数据从ROM
你可以通过使用`>REGION'把一个节赋给前面已经定义的一个内存区域。
这里有一个简单的例子: