什么是64位平台上的ELF对象文件大小限制?

时间:2010-10-21 13:59:51

标签: gcc compiler-construction 64-bit elf relocation

假设x86 64和linux平台。

如果你查看ELF标题,偏移量都是64位。

因此,使用relocatoin R_X86_64_64创建大于4G的目标文件很容易。这意味着静态.o文件和可执行文件可以像64位一样大。

但是,对于共享库,比如gcc,我们只有R_X86_64_PLT32重定位。这意味着创建一个大于4GB的共享库是不可能的,对吗?

因此,如果我想构建一个庞大的程序,其中一个.o文件足够大(> 4GB),唯一的选择是静态链接吗?

欢迎任何评论。

谢谢, LIMI

1 个答案:

答案 0 :(得分:2)

x86-64 ABI used by Linux定义了一个“大型模型”,专门用于避免这种大小限制,其中包括GOT和PLT的64位重定位类型。 (参见4.4.2节中的表格,以及3.5.5中的指令序列,说明如何使用它们。)