Невозможно dlopen, не может загрузить библиотеку на Android 2.1, но может на 2.2+ - PullRequest
2 голосов
/ 12 октября 2011

Я скомпилировал библиотеку JNI для Android с NDK, который статически связывается с libcrypto.a, который я скомпилировал с помощью этого проекта, https://github.com/fries/android-external-openssl, который динамически связывается с libdl.so.

Несмотря на то, что в каталоге NDKs platform / android-x / arch-arm / usr / lib есть файл libdl.so для каждой версии android, когда я пытаюсь загрузить свою библиотеку на Android 2.1, я получаю следующую ошибку:

Trying to load lib /data/data/package.name/lib/libmylibrary.so 0x44e83a28
Unable to dlopen(/data/data/package.name/lib/libmylibrary.so): Cannot load library: reloc_library[1244]:    30 cannot locate 'dladdr'...

и затем происходит сбой с UnsatisfiedLinkError, но на 2.2+ моя родная библиотека связывается и отлично работает

любые мысли о том, что со мной происходит или как это исправить?

1 Ответ

2 голосов
/ 14 октября 2011

Итак, изучая эту проблему, я обнаружил, что хотя libdl существует во всех версиях android, dladdr () был добавлен в библиотеку C в 2.2

, соответствующие строки NDK changes.html выглядят следующим образом:

- C Library changes:

For android-8 (a.k.a. Android 2.2):
   - add DL_info and dladdr().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...