我正在构建一个具有巨大 .so 文件的应用程序 - 大小超过 2GB(已剥离)。共享对象文件的大小是否有限制?因为 strace 显示文件因为太大而被拒绝。
我的系统目前是 32 位系统,我也想知道当我为 64 位 Linux 系统构建时,这会发生多大的变化。
这取决于您系统的内存 *.so 链接直接加载可执行文件或系统本身,如果您的内存不足或操作系统分配了大量内存,则无法加载,如果您为 64 位系统构建,它将扩展超过 2 gb在大小上,因为添加了一些 64 位标志和指令。
由于共享库完全加载到内存中,我强烈建议您将资源移到一些外部文件中。恕我直言,2GB 对于共享库来说是完全不可接受的,并且会在低内存系统上引起问题。
更新:
请忽略我关于将整个共享库加载到内存中的第一句话。正如 OP 评论的那样,共享库确实是 mmap 的,并且符号页面是按需加载的。