4

我正在尝试将一些 Linux 代码移植到 Android。我意识到代码将涉及多个 jni 引用的 .so 共享库,大小远远超过 20 mb。

我想知道每个 .so 是否有最大大小?

另外,我的应用程序可以拥有的 .so 文件是否有最大总大小,因为 .so 文件实际上是内存映射的?

我用谷歌搜索了这个,几乎什么也没找到,所以描述这个的资源会很有帮助

4

2 回答 2

5

据我所知,.so 文件的大小没有限制。我见过几个使用超过 20MB 的共享库的 Android 应用程序。

但是,在 Android 中,您的进程中加载​​的 .so 文件的数量存在限制。该限制通常设置为 128。请参阅http://androidxref.com/4.2_r1/xref/bionic/linker/linker.cpp#286

确切的数字可能因设备制造商而异,因为他们经常更改常数。您可能认为这个数字已经足够大了,但请注意,您的进程中加载​​了许多内置共享库,即使您没有加载自己的任何共享库。

我不能告诉你 20 个共享库会或不会超过限制。它取决于设备。如果您担心,您可以将这 20 个库合并为一个巨大的库文件。

于 2013-02-14T14:28:03.837 回答
1

这是对 Android 动态链接器的共享库数量的限制。但我发现最近从 4.3 开始取消了限制。在 4.2.2 中,有一个 SO_MAX,请参见4.2.2 中的 linker.cpp 注释。但在 4.3 中,删除了 SO_MAX,请参阅4.3 中的 linker.cpp 注释

于 2014-03-03T09:40:30.740 回答