2013-10-07 2 views
1

Я попытался реализовать библиотеку NDK, для которой нужна другая внешняя библиотека, скомпилированная в Linux как .so-файл.Android NDK, не удалось найти зависимую библиотеку

У меня следующие отношения: libl1 зависит от libl2.

Я попытался создать libl2.so как общий и добавил его в модуль libl1. Все компилируется нормально и на моем LG Nexus 4 отлично работает, когда я загружаю libl1 так:

static { 
    System.loadLibrary('l1'); 
} 

Но это не работает на Samsung 4.03 Android версии. В этом устройстве он работает с этим кодом:

static { 
    System.loadLibrary('l2'); 
    System.loadLibrary('l1'); 
} 

Я обнаружил, что Android ClassLoader не может загружать зависимость. Но почему он отлично работает на Nexus 4? Но не устройство Samsung?

ответ

2

Поведение, которое вы видите на Nexus4, не ожидается, и я снова проверил, что нет специального лечения, по крайней мере, по версии 4.2.2 (постройте JDQ39). Возможно, на вашем Nexus установлен какой-то другой Android? Может быть, у вашего устройства есть файл /system/lib/libl2.so по любой причине?

Ожидается поведение вашего устройства Samsung, и это то, что команда Android считает правильным. Все разделяемые библиотеки должны быть загружены в порядке их зависимости от Java или вы всегда можете вызвать dlopen() явно, если хотите, но потеряете всю простоту использования компоновщика для разрешения ссылок на функции в этих общих библиотеках для вас.

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