我正在尝试将一些 Linux 代码移植到 Android。我意识到代码将涉及多个 jni 引用的 .so 共享库,大小远远超过 20 mb。
我想知道每个 .so 是否有最大大小?
另外,我的应用程序可以拥有的 .so 文件是否有最大总大小,因为 .so 文件实际上是内存映射的?
我用谷歌搜索了这个,几乎什么也没找到,所以描述这个的资源会很有帮助
我正在尝试将一些 Linux 代码移植到 Android。我意识到代码将涉及多个 jni 引用的 .so 共享库,大小远远超过 20 mb。
我想知道每个 .so 是否有最大大小?
另外,我的应用程序可以拥有的 .so 文件是否有最大总大小,因为 .so 文件实际上是内存映射的?
我用谷歌搜索了这个,几乎什么也没找到,所以描述这个的资源会很有帮助
据我所知,.so 文件的大小没有限制。我见过几个使用超过 20MB 的共享库的 Android 应用程序。
但是,在 Android 中,您的进程中加载的 .so 文件的数量存在限制。该限制通常设置为 128。请参阅http://androidxref.com/4.2_r1/xref/bionic/linker/linker.cpp#286。
确切的数字可能因设备制造商而异,因为他们经常更改常数。您可能认为这个数字已经足够大了,但请注意,您的进程中加载了许多内置共享库,即使您没有加载自己的任何共享库。
我不能告诉你 20 个共享库会或不会超过限制。它取决于设备。如果您担心,您可以将这 20 个库合并为一个巨大的库文件。
这是对 Android 动态链接器的共享库数量的限制。但我发现最近从 4.3 开始取消了限制。在 4.2.2 中,有一个 SO_MAX,请参见4.2.2 中的 linker.cpp 注释。但在 4.3 中,删除了 SO_MAX,请参阅4.3 中的 linker.cpp 注释。