2012-05-31 67 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

是的,我承認我的錯誤 - 你完全正確。 –