【发布时间】:2013-08-01 06:19:29
【问题描述】:
我想为某些部分指定对齐方式。对于ld 2.20.0,以下方法有效:
-
创建一个仅包含应该对齐的部分的链接描述文件,例如:
SECTIONS { .data ALIGN(0x40): { *(.data) } .text ALIGN(0x40): { *(.text) } .plt ALIGN(0x10): { *(.plt) } } -
然后链接:
-rpath-link=/path/to/LinkerScript.ld /path/to/LinkerScript.ld例如将脚本包含在 rpath-link 中,并将其作为目标文件之一传递。
现在,当使用 gold 2.23.1 以相同方式链接时,脚本被拒绝并出现以下错误:
LinkerScript.ld: SECTIONS seen after other input files; try -T/--script
所以 gold 希望我指定一个完整的链接器脚本,但我只想更改几个属性。这可能吗?
我已经试过了:
- 使用
-T选项传递脚本。这会产生一个无法启动的损坏的可执行文件。据我了解,这是因为-T只接受完整的链接器脚本,而以上只是对现有脚本的“注释”。 - 同样,将带有
-T选项的脚本传递给ld 2.20.0时,由于某些部分未指定,因此无法链接。它不是我用例的“完整”链接器脚本。 - 所以我尝试获取完整的链接器脚本。
ld --verbose将打印默认链接描述文件。我不得不删除gold无法理解的几个符号,之后使用-T/path/to/LinkerScript.ld选项生成的可执行文件不再起作用。 - 很遗憾,
gold没有显示其默认链接描述文件的选项(它不使用任何链接描述文件)。 - 手册页没有指定如何使用参数更改上述情况的对齐方式。
任何帮助将不胜感激!
【问题讨论】:
标签: c++ linux linker ld binutils