не удалось загрузить библиотеку libdl.so.2

Я пытаюсь использовать скомпилированную предварительно созданную общую библиотеку linux с моим приложением jni для Android, но когда я пытаюсь запустить приложение, появляется следующая ошибка:

04-16 19: 09: 13.633: E / dalvikvm (11810): dlopen ("/ data / app-lib / com.lXXXX.XXXX.connect-2 / libXXX_embedded_shared.so") не удалось: не удалось загрузить библиотеку: soinfo_link_image (компоновщик .cpp: 1636): не удалось загрузить библиотеку «libdl.so.2», необходимую для «libXXX_embedded_shared.so»; вызвано load_library (linker.cpp: 746): библиотека "libdl.so.2" не найдена

Я не смог найти libdl.so.2 в android / system / lib, но есть библиотека libdl.so, которую я пытался загрузить, но она все еще не разрешила зависимость.

Не могли бы вы указать мне, что мне здесь не хватает?


person Kumar Rounak    schedule 16.04.2014    source источник
comment
Попробуйте создать символическую ссылку libdl.so.2 на libdl.so и посмотрите, решит ли это проблему. Я предполагаю, что предварительно созданная библиотека linux, о которой вы говорите, на самом деле является предварительно созданной библиотекой Android, которая была скомпилирована для правильной архитектуры руки, над которой вы работаете.   -  person Alex Barker    schedule 16.04.2014
comment
Спасибо, Алекс. Я уже пробовал создать символическую ссылку libdl.so на libdl.so.2, и это не решило проблему. Не могли бы вы придумать что-нибудь еще, что я могу попробовать?   -  person Kumar Rounak    schedule 17.04.2014


Ответы (1)


Ты не сможешь это сделать.

Android и обычный Linux имеют совершенно разные пользовательские пространства, в частности, они используют совершенно разные библиотеки C и связанные с ними несовместимые динамические компоновщики.

Само желание иметь имя версионной библиотеки (.so.2 - то, что Android в настоящее время не делает) указывает на то, что эта библиотека не была создана для Android.

Вам необходимо перестроить все свои библиотеки с помощью android ndk либо путем создания файлов Android.mk и аналогичных файлов для работы с обычной системой сборки ndk, либо с помощью утилиты ndk для создания «автономной цепочки инструментов». и указав в системе сборки вашего проекта результирующий gcc, ld и т. д., ориентированный на android.

Некоторым людям удалось использовать обычные компоненты пользовательского пространства linux на устройствах с root-доступом, поместив в chroot полную минимальную установку debian-arm или аналогичную, но для этого требуется root-доступ, и jni в любом случае не сможет связать его из процесса приложения. Процесс вашего приложения уже глубоко привязан к библиотеке C Android, поэтому вы не можете заменить другой.

person Chris Stratton    schedule 16.04.2014