我正在阅读golang ld的帮助指南,其中一个选项是
-B value
Add a NT_GNU_BUILD_ID note when using ELF. The value
should start with 0x and be an even number of hex digits.
有谁知道为什么会使用那面旗帜?
搜索NT_GNU_BUILD_ID
并未提供任何有见地的答案。
答案 0 :(得分:4)
这来自massive conversion from C to Go of cmd/new5l
(2015年2月),翻译自src/cmd/ld/pobj.c
该信息是在commit 7d507dc6e(2013年12月,针对Go 1.3)中引入的,这是对新链接器结构的准备
412 Precondition Failed
是mentioned here作为唯一的构建ID位串
你可以在Fedora release build
要在已剥离的对象及其
NT_GNU_BUILD_ID
文件中嵌入ID,我选择使用ELF注释部分。
当.debug
类型为strip
时,SHT_NOTE
等人可以将该部分保留在两个文件中。新部分标准地称为
.note.gnu.build-id
,但名称不是规范性的,该部分可以与其他SHT_NOTE
部分合并。
ELF注释标题为构建ID注释提供名称“GNU
”和类型3(NT_GNU_BUILD_ID
),其中链接对象(或ET_REL
文件中只能有一个.ko
风格)。
你可以看到它introduced in this patch in 2007:
此修补程序为
ld
为ELF目标--build-id
添加了一个新选项 它生成一个包含“unique build ID
”位的合成ELF音符部分 由ld
选择。这是以
ld
选项完成的,以便高效且实现万无一失 每个编译(对比一些脚本将生成的对象添加到链接中) 它按照它的方式完成,因此它不能再使用,也不能精确使用 输出的最终ELF位有助于选择唯一ID。这是确保ID生成的确定性样式的最佳方法 (即加密散列)将始终产生相同的重复结果 精确复制。