gpt4 book ai didi

embedded-linux - 在嵌入式 Linux 中只有一种 --hash 样式。为什么?

转载 作者:行者123 更新时间:2023-12-04 06:48:59 25 4
gpt4 key购买 nike

我正在尝试使用 OpenEmbedded-based Arago 构建并部署到 rootfs 中的软件包.不幸的是,该软件包包含预先构建的共享库。据我了解,Arago 使用 --hash-style=gnu 构建了整个 Linux 发行版。 ,而那些共享库是使用 --hash-style=sysv 构建的, 我猜测。至少构建会因“ELF 二进制文件中没有 GNU_HASH”QA 问题而停止。

我了解哈希的用途。但我想我不明白系统运行时它们是如何使用的。

为什么系统中的所有 ELF 都需要一种哈希样式?为什么动态链接器不能即时确定散列样式并直接使用它?

最佳答案

动态链接器 可以 找出 ELF 中存在的哈希表类型(“sysv”或“gnu”)并相应地工作。
不幸的是,您所看到的情况是,对 gnu 哈希部分的支持尚未向后移植到您系统上使用的旧版本动态链接器。
存在类似的情况,其中 binaries built for RHEL5/FC6 do NOT work on RHEL4/FC5 .

为什么 .gnu.hash 与 .hash(sysv) 不兼容?
使用 gnu 哈希部分生成 ELF 对动态符号表的构建施加了某些限制(附加规则)。
使用 GNU 哈希,动态符号表分为两部分。第一部分接收可以从哈希表中省略的符号。 GNU 哈希不会对动态符号表的这一部分中的符号强加任何特定的顺序。
动态符号表的第二部分接收可从哈希表访问的符号。这些符号需要使用上述 GNU 哈希函数通过增加 (hash % nbuckets) 值进行排序。散列桶 (nbuckets) 的数量记录在 GNU 散列部分中,如下所述。因此,将在单个哈希链中找到的符号在内存中是相邻的,从而获得更好的缓存性能。
引用:blogs.oracle.com/ali/entry/gnu_hash_elf_sections

关于embedded-linux - 在嵌入式 Linux 中只有一种 --hash 样式。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com