2012-05-31 68 views
1

我正在构建一个具有巨大.so文件的应用程序 - 远远超过2GB(剥离)。 共享对象文件的大小是否有限制? 因为strace显示文件被拒绝,因为它太大。是否有共享对象文件的最大大小?

我的系统目前是32位系统,我也想知道当我为64位Linux系统构建时,这个变化有多大。

+2

什么样的.so如此大以至于大于2GB? – Jay

+1

你有一堆编译资源吗?一个2GB的.so文件是荒谬的。这是其中一个“如果你不得不问你可能做错了什么”的问题。 –

+0

@EdS。我同意有什么不对 - 这个.so文件中有特定的工具。如果我将这些仪器剥离出来,那么.so会小得多,但这会破坏目的。 –

回答

0

这取决于您的系统的内存* .so链接直接加载可执行文件或系统本身,它不能加载,如果你有低内存或OS分配大量的内存,如果你建立64位系统,它会扩大由于添加了一些64位标志和指令,因此大小超过2 GB。

+0

我的工具在64位系统上不会变大,但实际上,这些对象文件将会变得更大。我想64位系统在任何地方都没有任何最大内存限制,所以在8GB 64位系统上有一个3GB的.so文件应该可以工作,对吧? –

0

由于共享库完全加载到内存中,我强烈建议您将资源移动到某些外部文件。恕我直言,2GB是完全不可接受的共享库,并会导致低内存系统的问题。

UPDATE:

请忽略我对整个加载共享库到内存中第一句话。正如OP所评论的,共享库确实是mmap,符号页面是按需加载的。

+0

据我所知(这是Strace告诉我的),共享库被映射到内存中。这表明大多数内存页面都是按需加载的。 –

+0

是的,我承认我的错误 - 你完全正确。 –