Когда я использую System.loadLibrary()
загрузить мой файл так, редко, он терпит неудачу и Logcat говоритандроид библиотека загрузка не удалась
Cannot load library: reloc_library[1286]: 121 cannot locate '__cxa_atexit'
java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 169 cannot locate '__cxa_atexit'...
at java.lang.Runtime.loadLibrary(Runtime.java:370)
at java.lang.System.loadLibrary(System.java:535)
После поиска в Интернете, я не нахожу детали о
cannot locate '__cxa_atexit'
(особенно ключевое слово __cxa_atexit). Почему не удается найти эту функцию? Эта функция, похоже, находится в libc.so. Я не использую C++ в своем родном коде, только C. Моя версия NDK - это android-ndk-r10e. Я думаю, что «не может найти __cxa_atexit», может быть, относительный ключ.
В большинстве случаев (возможно, миллиарды запусков приложения), он может работать хорошо, но редко падает, как указано выше. Другими словами, я не могу сделать это сбоем на своих тестирующих телефонах, однако он редко срабатывает на некоторых пользователях.
Эта проблема может быть такой же, как another problem.
UPDATE
Большинство телефонов, этот сбой происходит на это Android 4.0.3 и Android 4.0.4. Эти две версии являются API-15.
UPDATE
После чтения исходного кода некоторых Андроида, я нашел этот вопрос может быть связан с dlopen. Сообщение об ошибке «Невозможно загрузить библиотеку: reloc_library ...» происходит из функции dlopen, которая была захвачена во время выполнения. Трассировка: runtime dlopen -> find_library -> init_library -> link_image -> reloc_library.
Возможно, когда он разрешит символы в моих файлах, он обнаруживает, что «__cxa_atexit» не определен. Затем он просматривает загруженные символы, но ничего не находит. (Почему не может найти __cxa_atexit?) Наконец, бежит к линии 1285 с кодом:
DL_ERR("%5d cannot locate '%s'...\n", pid, sym_name);
Я не знаю, что-то о линкере. Может ли кто-нибудь объяснить или догадаться, почему __cxa_atexit не может быть найден? Это ошибка Android?
UPDATE
Он падает на ВСЕХ Android версии не только 4.0.3 & 4.0.4.
Сообщение об ошибке на 4.0.3 & 4.0.4
java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1286]: 121 cannot locate '__cxa_atexit'
, как упомянуто выше.
При загрузке какой-либо другой так далее 4.0.3 & 4.0.4, это
cannot locate 'strcpy'
Сообщение об ошибке на 4.2.2 является
java.lang.UnsatisfiedLinkError: Cannot load library: load_library(linker.cpp:767): can't read file /mnt/asec/app-name-1/lib/libname.so: I/O error
Вы видели http: // stackoverflow .com/вопросы/32425865/race-condition-in-android-dlopen/32460683 # 32460683? – 18446744073709551615
Это не те же проблемы. Я также использую «System.loadlibrary()», как вы отметили. и если это не удается, я разархивирую файл из apk и перезагружаю его. В большинстве случаев он может работать хорошо, но иногда сбой. Другими словами, я не могу сделать это сбоем на моем собственном телефоне, однако он падает на других пользователей, которые используют мое приложение. – homelesser
попробуйте это: http: //stackoverflow.com/questions/15204492/system-loadlibrary-error – KishuDroid