mylib.so a des relocalisations de texte. Cela gaspille de la mémoire et représente un risque pour la sécurité. S’il-vous-plaît, réparez

Mon application Android (utilisant une bibliothèque native) imprime cet avertissement sur Android 4.4:

linker mylib.so a des relocalisations de texte. Cela gaspille de la mémoire et représente un risque pour la sécurité. S’il-vous-plaît, réparez.

Avez-vous une idée de ce que c’est et comment y remédier? Merci,

Cela semble être le résultat de deux bogues ndk-gcc mentionnés à l’ adresse https://code.google.com/p/android/issues/detail?id=23203.

et a déclaré qu’il avait été corrigé à partir de ndk-r8c.

Il semblerait que la vérification des bibliothèques avec le problème ait été ajoutée récemment.

Remarque: veuillez ne pas modifier ce message pour masquer l’URL du lien. Il est explicite car la destination est ce qui la rend autoritaire.

Remarque supplémentaire La modification des versions de NDK n’est qu’un correctif lorsque l’avertissement est dû au code de votre application. Cela n’aura aucun effet si l’avertissement concerne plutôt un composant du système tel que libdvm – qui ne peut être résolu que par une mise à jour du système.

Vous devez rendre le code dans votre position de bibliothèque indépendant … ajoutez -fpic ou -fPIC à votre LOCALC_FLAGS dans votre Android.mk et vous devez également vous assurer que vous ne LOCALC_FLAGS pas de liens avec des bibliothèques statiques ou partagées contenant des délocalisations de texte se. Si c’est le cas et que vous pouvez les recomstackr, utilisez l’un des indicateurs mentionnés ci-dessus.

En bref, vous devez comstackr votre bibliothèque avec l’un des -fpic ou -fPIC , où PIC est l’abréviation de Position Independent Code .

La réponse plus longue est que yourlib.so a été compilé d’une manière qui n’est pas conforme à la norme Google Android pour un fichier ELF, où cette entrée de Dynamic Array Tag est inattendue. Dans le meilleur des cas, la bibliothèque fonctionnera toujours, mais il s’agit toujours d’une erreur et la future version d’AOS ne lui permettra probablement pas de s’exécuter.

DT_TEXTREL 0x16 (22)

Pour vérifier ce qui est dans votre bibliothèque, utilisez quelque chose comme:

 # readelf --wide -S yourlib.so There are 37 section headers, starting at offset 0x40: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .text PROGBITS 0000000000000000 002400 068f80 00 AX 0 0 16 [ 2] .rodata PROGBITS 0000000000000000 06b380 05ad00 00 WA 0 0 32 ... [16] .rela.text RELA 0000000000000000 26b8e8 023040 18 14 1 8 ... [36] .rela.debug_frame RELA 0000000000000000 25a608 0112e0 18 14 27 8 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (ssortingngs), l (large) I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) 

S’il vous plaît voir ma réponse complète sur le sujet, pour plus de détails d’ DT entry . Pour plus de détails sur la manière d’écrire des bibliothèques dynamics correctes, ceci est indispensable .

J’ai eu la même erreur avec ma demande. L’application utilisait un démon natif utilisant une bibliothèque native qui n’implémentait pas toutes les fonctions de son fichier d’en-tête. Lorsque j’ai ajouté les implémentations requirejses à la bibliothèque native, tout fonctionnait.

Je ne sais pas si vous avez exactement le même problème, mais cela signifie probablement que votre côté natal a des incohérences.