【发布时间】:2015-04-17 14:02:42
【问题描述】:
我想将多个 .o 文件合并到一个 .o 中,同时还合并一些部分。
如果我执行
ld -r first.o second.o -o result.o
然后它会正确合并目标文件,但我还需要合并各种 .text 部分。当您链接共享对象时,ld 中的默认链接器脚本可以使用此部分合并功能,但我没有设法在使用 -r 时强制使用自定义链接器脚本。 ld 似乎忽略了我尝试过的任何脚本。我尝试修改默认链接器脚本并将 .text 节块替换为此
.text :
{
*(.text.unlikely .text.*_unlikely)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
} =0x90909090
如何在合并目标文件的同时使用 ld 合并 .text 部分?
【问题讨论】:
-
您是如何得出
ld -r不 合并.text部分的(可能不正确的)结论?另外,您在哪个平台上使用了哪个版本的ld? -
我使用以下 ld 版本:GNU ld (GNU Binutils) 2.20.0.20100122-0.7.9。也尝试了较新的版本,结果相同。我不是在谈论 ld 不合并不同目标文件的
.text部分,而是不合并目标文件的 all.text*部分,例如.text、.text._ZN13somenamespace3FooD1Ev、@ 987654330@、.text._ZNSt8_Rb_treeIPN13somenamespace3BarES2_St9_IdentityIS2_ENS1_6isLessESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E等