gpt4 book ai didi

c - R_X86_64_32S 和 R_X86_64_64 重定位是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 16:18:53 24 4
gpt4 key购买 nike

当我尝试在 64 位 FreeBSD 中编译 C 应用程序时出现以下错误:

relocation R_X86_64_32S can not be used when making a shared object; recompile with -fPIC

什么是 R_X86_64_32S 重定位,什么是 R_X86_64_64

我已经用谷歌搜索了这个错误,它是可能的原因 - 如果有人能说出 R_X86_64_32S 的真正含义,那就太好了。

最佳答案

R_X86_64_32SR_X86_64_64 是重定位类型的名称,用于为 amd64 架构编译的代码。您可以在 amd64 ABI 中查找所有这些内容.根据它,R_X86_64_64 被分解为:

  • R_X86_64 - 所有名称都以此为前缀
  • 64 - 直接 64 位重定位

R_X86_64_32S到:

  • R_X86_64 - 前缀
  • 32S - 将值截断为 32 位并进行符号扩展

在这两种情况下,这基本上意味着“此重定位所指向的符号的值加上任何加数”。对于 R_X86_64_32S,链接器然后验证生成的值是否符号扩展为原始 64 位值。

现在,在可执行文件中,代码和数据段被赋予了指定的虚拟基地址。可执行代码不共享,每个可执行文件都有自己的新地址空间。这意味着编译器确切地知道数据部分的位置,并且可以直接引用它。另一方面,库只能知道它们的数据部分将位于距基地址指定的偏移量处;该基地址的值只能在运行时知道。因此,所有库都必须生成无论将其放入内存何处都可以执行的代码,称为位置无关代码(或简称 PIC)。

现在谈到解决您的问题时,错误消息不言而喻。

关于c - R_X86_64_32S 和 R_X86_64_64 重定位是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6093547/

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