gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:04:19 34 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/57820336/

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