我正在阅读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.
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么要使用该标志?
搜索NT_GNU_BUILD_ID没有提供任何有见地的答案。
这来自(2015年2月)从C到Gocmd/new5l的大规模转换,翻译自src/cmd/ld/pobj.c
该信息已在提交7d507dc6e(对于Go 1.3,2013年12月)中进行了介绍,这是对新链接程序结构的准备
NT_GNU_BUILD_ID在这里提到作为一个独特的版本ID位串。
您会在Fedora发行版中看到它的使用
要将ID嵌入剥离对象及其
.debug文件中,我选择使用ELF注释部分。
strip等人可以将节的类型保留为两个时保持不变SHT_NOTE。新的部分通常称为
.note.gnu.build-id,但名称不是标准的,并且该部分可以与其他SHT_NOTE部分合并。
ELF注释标题的名称为“GNU”,并NT_GNU_BUILD_ID为构建ID注释输入3(),在链接的对象(或样式ET_REL文件.ko)中只能有一个。
您可以在2007年的此修补程序中看到它:
此补丁
ld为ELF目标添加了一个新选项--build-id。
它生成一个合成的ELF音符部分,其中包含unique build ID由“ ”选择的位ld。这样做是
ld为了提高效率和万无一失,以使其能够进行每次编译(相对于某些脚本将生成的对象添加到链接中)来实现。
这样做的方式是这样,它可以使用不超过且不小于输出的最终ELF位来帮助选择唯一ID。这是确保ID生成的确定性样式(即加密哈希)对于精确复制的重复构建始终产生相同结果的最佳方法。