当我尝试在64位FreeBSD中编译C应用程序时出现以下错误:
什么是R_X86_64_32S
重定位,什么是R_X86_64_64
?
我已经搜索了该错误,并且可能是原因-如果有人能说出R_X86_64_32S的真正含义,那就太好了。
最佳答案
R_X86_64_32S
和R_X86_64_64
是重定位类型的名称,用于为amd64架构编译的代码。您可以在amd64 ABI中查找所有这些内容。
据此,R_X86_64_64
细分为:
和
R_X86_64_32S
可以:在两种情况下,这基本上表示“此重定位所指向的符号的值加上任何加数”。对于
R_X86_64_32S
,链接器然后验证生成的值是否符号扩展为原始的64位值。现在,在可执行文件中,为代码和数据段指定了指定的虚拟基址。可执行代码不共享,每个可执行文件都有自己的新地址空间。这意味着编译器确切知道数据节将在哪里,并可以直接引用它。另一方面,库只能知道它们的数据段与基地址之间有指定的偏移量。该基地址的值只能在运行时知道。因此,所有库必须使用无论位置如何都可以执行的代码(称为位置无关代码(简称PIC))生成。
现在,当要解决您的问题时,错误消息说明了一切。
关于c - R_X86_64_32S和R_X86_64_64重定位是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6093547/