Igo*_*.K. 6 ld embedded-linux openembedded
我正在尝试使用基于OpenEmbedded的Arago构建并部署到rootfs中的软件包.不幸的是,软件包包括预构建的共享库.据我所知,Arago构建了整个Linux发行版--hash-style=gnu,而我建议使用这些共享库--hash-style=sysv,我怀疑.至少构建在"ELF二进制文件中没有GNU_HASH"QA问题中停止.
我明白什么是哈希.但我想我不明白它们在系统运行时是如何被使用的.
为什么系统中的所有ELF都需要一个哈希样式?为什么动态链接器不能动态确定哈希样式而只是使用它?
动态链接器可以并且确实找出 ELF 中存在的哈希表类型(“sysv”或“gnu”)并相应地工作。
不幸的是,您看到的情况是,对 gnu 哈希部分的支持尚未向后移植到您系统上使用的旧版本动态链接器。
存在类似的情况,其中为 RHEL5/FC6 构建的二进制文件不适用于 RHEL4/FC5。
使用 gnu 哈希部分生成 ELF 对动态符号表的构造施加了某些限制(附加规则)。
通过 GNU hash,动态符号表被分为两部分。第一部分接收可以从哈希表中省略的符号。GNU 哈希不会对动态符号表的这一部分中的符号强加任何特定的顺序。
动态符号表的第二部分接收可从哈希表访问的符号。这些符号需要使用上述 GNU 哈希函数通过增加 (hash % nbuckets) 值进行排序。哈希桶(nbuckets)的数量记录在GNU哈希部分中,如下所述。因此,在单个哈希链中找到的符号在内存中是相邻的,从而带来更好的缓存性能。
参考:blogs.oracle.com/ali/entry/gnu_hash_elf_sections
| 归档时间: |
|
| 查看次数: |
4754 次 |
| 最近记录: |