64位平台上ELF目标文件大小的限制是多少?

4
假设您使用的是x86 64和linux平台。
如果您查看ELF头文件,偏移量都是64位的。
因此,通过relocation R_X86_64_64可以轻松创建一个大于4G的目标文件。这意味着静态.o文件和可执行文件可以达到64位所能表示的大小。
然而,对于像gcc这样的共享库,我们只有R_X86_64_PLT32 relocation。这意味着无法创建大于4GB的共享库,对吗?
所以,如果我想构建一个非常大的程序,其中一个.o文件足够巨大(>4GB),唯一的选择就是静态链接?
欢迎任何评论。
谢谢, limi
1个回答

3

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


非常感谢。我阅读了ABI并注意到gcc从4.3开始支持它。我现在正在尝试它。 - limi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接