2013-02-14 4 views
4

J'essaie de porter du code Linux sur Android. J'ai réalisé que le code impliquerait plusieurs bibliothèques .so partagées jni de plus de 20 mb.Taille maximale de la bibliothèque partagée Android

Je veux savoir s'il y a une taille maximale pour chaque .so?

De même, existe-t-il une taille maximale totale pour les fichiers .so que mon application peut avoir, puisque les fichiers .so sont en réalité mappés en mémoire?

Je googlé cela et trouvé pratiquement rien, donc une ressource qui décrit ce serait très utile

Répondre

5

Pour autant que je sache, il n'y a pas de limitation de la taille du fichier .so. J'ai vu plusieurs applications Android où une bibliothèque partagée de plus de 20 Mo est utilisée.

Cependant, dans Android, il y a une limite sur le nombre de fichiers .so chargés dans votre processus. La limite est généralement fixée à 128. Reportez-vous à http://androidxref.com/4.2_r1/xref/bionic/linker/linker.cpp#286.

Le nombre exact peut varier en fonction des fabricants d'appareils, car ils changent souvent la constante. Vous pensez peut-être que le nombre est assez important, mais sachez que de nombreuses bibliothèques partagées intégrées sont chargées dans votre processus même si vous ne chargez aucune bibliothèque partagée.

Je ne peux pas vous dire que les 20 bibliothèques partagées dépasseront ou ne dépasseront pas la limite. C'est dépendant de l'appareil. Si vous êtes inquiet, vous pouvez fusionner ces 20 bibliothèques en un seul fichier de bibliothèque énorme.

+0

Ce lien répond à peu près à une grande partie de ma question, même si je me suis davantage préoccupé de la taille du .so plutôt que de leur nombre. Merci Jiyong. –

1

Il s'agissait d'une limite sur le nombre de bibliothèques partagées de l'éditeur de liens dynamiques d'Android. Mais j'ai trouvé que la limite est supprimée depuis 4.3. En 4.2.2, il y a un SO_MAX, voir note of linker.cpp in 4.2.2. Mais dans 4.3, SO_MAX est supprimé, voir note of linker.cpp in 4.3.

Questions connexes