Answers:
/usr/lib/.build-id
包含已安装软件包的主要build-id文件。在Fedora 27之前,它们与调试文件一起存在于中/usr/lib/debug
,并且仅在调试RPM中提供。在Fedora 27中,引入了一项更改,以允许并行安装多个调试信息包。更改的一部分涉及将主build-id文件放入匹配的软件包中,以确保它们与已安装的二进制文件匹配。
调试信息包在许多发行版中使用,为用户提供了一种在必要时安装调试信息的方式,而不会膨胀所有人的二进制文件。在构建和链接程序或库时,可以使用调试信息来构建程序或库,然后调试器可以使用该信息将二进制文件中的位置与源代码中的位置进行映射。但是此信息会占用大量空间。因此,调试信息通常在打包之前从二进制文件中剥离。近年来,对它进行了增强strip
并objcopy
得到了增强,以便可以分别提取和存储调试信息,这就是构建调试信息包的方式。然后,所有需要的是某种方式来确保二进制文件及其调试信息相对应,并且这就是内部版本ID的来源-它们是由ld
(在--build-id
那儿查找)二进制的重要部分。“主内部版本号文件”是从内部版本号到相应的二进制或调试信息文件的符号链接;它们允许实现双向映射,以便可以有效地调试核心转储(在本.gnu_debuglink
节中的二进制文件本身中,有从二进制文件到其构建ID的链接)。您可以在Fedora build-id功能描述中找到所有这些原因背后的详细解释。
rpm --query --file /usr/lib/.build-id
列出了一大堆“拥有”的包裹/usr/lib/.build-id
……很奇怪。