假设x86 64和linux平台。
如果你查看ELF标题,偏移量都是64位。
因此,使用relocatoin R_X86_64_64创建大于4G的目标文件很容易。这意味着静态.o文件和可执行文件可以像64位一样大。
但是,对于共享库,比如gcc,我们只有R_X86_64_PLT32重定位。这意味着创建一个大于4GB的共享库是不可能的,对吗?
因此,如果我想构建一个庞大的程序,其中一个.o文件足够大(> 4GB),唯一的选择是静态链接吗?
欢迎任何评论。
谢谢, LIMI
答案 0 :(得分:2)
x86-64 ABI used by Linux定义了一个“大型模型”,专门用于避免这种大小限制,其中包括GOT和PLT的64位重定位类型。 (参见4.4.2节中的表格,以及3.5.5中的指令序列,说明如何使用它们。)