在打 RPM 包的 debuginfo 包时遇到了这个问题。谷歌/百度上的解决方法都没法生效。那些解决方法看上去就挺离谱的,打 debuginfo 包出问题了就不打debuginfo 包了。。。
BUILD ID 介绍
redhat 的文档: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/developer_guide/compiling-build-id
简单的说,build id 是一种二进制某些部分的哈希校验码,同一个程序多次编译时这个 build id 是不变的。
查看二进制
可以通过下面一条命令查看 BUILD ID 信息,如果有 build id 的话,就会如下图红框所示。
eu-readelf -n xxx
GCC
我们可以通过 gcc -v
查看 gcc 信息,如果想要生成 build id,使用的 gcc 编译 configure 时必须要包含 --enable-linker-build-id
,否则无法生成。
这里可以参考 GCC 的官方文档https://gcc.gnu.org/install/configure.html
编译选项
在编译的时候,LDFLAGS 里千万不要加上 --build-id=none
,这个选项会覆盖之前所有关于 build id 的设置。
可以参考 ld 的文档 https://sourceware.org/binutils/docs-2.23.1/ld/Options.html#Options
参考资料
[1] redhat官方文档 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/developer_guide/compiling-build-id
[2] gcc 官方文档 https://gcc.gnu.org/install/configure.html
[3] ld 官方文档 https://sourceware.org/binutils/docs-2.23.1/ld/Options.html#Options