2013-10-12 4 views
1

Я создал две общие библиотеки - libvpx.so и libmyapp.so. Библиотека libmyapp.so зависит от libvpx.so.Как разрешены общие библиотеки?

Файл .apk содержит библиотеки по стандарту lib/armeabi.

В моем файле Java, у меня есть:

class MyVPX { 
    static { 
    System.LoadLibrary("myapp"); 
    } 
    ... 
} 

Когда приложение запускается, я получаю неудовлетворенный-стыковку ошибку, libvpx.so не был найден при загрузке libmyapp.so.

Если я явно загрузить libvpx.so, все работает, как ожидалось:

class MyVPX { 
    static { 
    System.LoadLibrary("vpx"); 
    System.LoadLibrary("myapp"); 
    } 
    ... 
} 

мне интересно, если кто-нибудь знает, что причины этого?

+0

Связано ли libmyapp с libvpx (например, с '-lvpx')? – Delyan

+0

Ссылка задана, но не с "-lvpx." В NDK у него есть другой механизм для связанных с приложениями общих библиотек. Кроме того, если ссылка не указана, я бы не получил неудовлетворенную ссылку-ошибку :-). С уважением. – Peter

+0

Кто знает, вы можете использовать dlopen * и * compile time linking. :) В общем, путь к исходной библиотеке apk добавлен в свойство 'java.library.path', поэтому эта зависимость должна быть решена. Можете ли вы опубликовать Application.mk, Android.mk, любые другие соответствующие Make-файлы и полная трассировка стека исключения? – Delyan

ответ

3

Это по дизайну. Android-загрузчик ищет только зависимости в папке /system/lib, и нет возможности автоматически загружать библиотеки в вашем каталоге родной библиотеки. Для этого есть неотъемлемая причина безопасности, см. "Bionic linker's LD_LIBRARY_PATH limitation" и другие темы в android-ndk forum.

С другой стороны, с Java вы можете загружать библиотеки из других библиотек библиотеки приложений или даже из SD-карты.

+1

Благодарим за помощь. Я подозревал, что LD_LIBRARY_PATH не продлевается. Теперь это подтверждается. С уважением. – Peter

Смежные вопросы