Как исправить ошибку 'dlopen не удалось: не удается найти символ "EVP_camellia_128_cbc" "при загрузке libssl.so на Android 5.x - PullRequest
0 голосов
/ 12 июня 2019

Я пытался собрать 64-битный (arm64) Openssl v1.1.1b и добавить его в свое приложение как разделяемую библиотеку (libcrypto.so и libssl.so). Я создал автономный набор инструментов с аргументами --arch arm64 и --api 21, затем собрал с ним библиотеки openssl и добавил их в свое приложение. Все 64-битные устройства с Android 6.x и выше прекрасно работают, но я застрял на Android 5.0.1 64-битной - планшет Lenovo TAB 2 A10-70L.

Проблема в том, что на этом конкретном Android при загрузке libssl.so я получаю сообщение об ошибке:

E/art     ( 2755): dlopen("/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so", RTLD_LAZY) failed: 
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...

E/MY_APP( 2755): 2019-06-12 14:22:27,984: [MY_APP][18446744071776944368] ERROR (2117) - Error in loading libraries : 
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...

Таким образом, будет сгенерировано исключение -> загрузка других библиотек после того, как libssl.so не будет выполнена, и приложение завершит работу во время или после заставки.

Я обнаружил в StackOverflow, что это может быть вызвано, если вы компилируете нативную библиотеку (как openssl) для более ранней версии Android, тогда используемый планшет ... Но я делаю openssl с api 21, это Android 5.0, так что не стоит это не проблема. Похоже, что openssl ожидает этот символ в библиотеках устройства, а у этого устройства его нет.

Что я пробовал:

  1. Чтобы использовать разные NDK для сборки openssl -> Я использовал 15-19 NDK, с этой версией я создал приложение, но произошла та же ошибка (с «Не могу найти символ»). Я пытался 12-14 ндк, чтобы быть ближе к ндк мы мы используем в нашем приложении для других родных библиотек (то есть 12b), но с этот NDK я вообще не умею делать openssl libs, он потерпит неудачу во время сборки.
  2. Чтобы использовать разные NDK для создания всего приложения -> Я пробовал 16 и 19, но в сборке были сбои и я не думаю, это поможет.
  3. Чтобы использовать 21 как minsdkversion в AndroidManifests, свойства проекта и файлы build.gradle, чтобы иметь все в той же версии API, но безуспешно.
  4. Я пытался собрать и реализовать более высокую версию openssl - 1.1.1c - но Произошла такая же ошибка с Камелией.
  5. Я пытался добавить, что отсутствует символ в качестве макроса для evp.h, но безуспешно (возможно, я должен добавить это по-другому).
  6. Я пытался исключить шифр камелии из сборка openssl путем редактирования make-файла, но вся сборка закончилась Ошибка

Почему это может происходить, и как я могу это исправить, чтобы запустить мое приложение на Android 5.x 64bit?

...