Короче говоря, вам нужно скомпилировать библиотеку с одним из -fpic
или -fPIC
флагов, где PIC является аббревиатурой для Position Independent Code.
Чем дольше ответ, что ваш yourlib.so был составлен таким образом, что не соответствует стандарту Google Android для файла ELF, где эта Dynamic Array Tag
запись является неожиданным. В лучшем случае библиотека все равно будет работать, но она по-прежнему является ошибкой, и будущая версия AOS, вероятно, не позволит ей запускаться.
DT_TEXTREL 0x16 (22)
Чтобы проверить, что там в библиотеки, используйте что-то вдоль линии:
# 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 (strings), 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)
Пожалуйста, смотрите my extensive answer по теме, для более DT entry
деталей. Подробнее о том, как писать правильные динамические библиотеки this is a must-read.
Такая же ошибка при установке утилиты apk с adb. Использование ndk-r9d. –
Вы сказали «ошибка». Можно игнорировать? Или это вопрос * реальный *? Благодарю. – dentex
@Chris Stratton У меня такое же предупреждение, и я использую android-ndk-r10e. Разве не возможно, что эта ошибка указывает на неправильное использование в lib.so. Например, не освобождение динамической памяти или чего-то еще – VMMF