Существуют ли другие библиотеки, от которых зависят две ваши библиотеки? Если это так, вам нужно убедиться, что они также доступны для JVM.
Имейте в виду, что ручная настройка "-Djava.library.path", по-видимому, стирает путь к библиотеке по умолчанию.
То есть со следующим кодом:
public class LibTest {
public static void main(String[] args) {
String property = System.getProperty("java.library.path");
StringTokenizer parser = new StringTokenizer(property, ":");
while (parser.hasMoreTokens()) {
System.err.println(parser.nextToken());
}
}
}
Запущен из затмения с выходами Java 1.6.0_14:
/opt/java/jre/lib/i386/client
/opt/java/jre/lib/i386
/opt/java/jre/../lib/i386
/opt/java/jre/lib/i386/client
/opt/java/jre/lib/i386
/usr/lib/xulrunner-devel-1.9.0.11
/usr/lib/xulrunner-devel-1.9.0.11
/usr/java/packages/lib/i386
/lib
/usr/lib
Но когда я устанавливаю аргумент JVM "-Djava.library.path = / tmp /", я получаю только:
/tmp/
Если вы вручную устанавливаете java.library.path, это может объяснить, почему ldd работает из командной строки, а ваш .so не из eclipse / java.
Вы можете попробовать не устанавливать java.library.path и использовать System.load с абсолютным путем к вашей библиотеке вместо вызова System.loadLibrary. Это может позволить JVM найти ваш .so и по-прежнему использовать путь по умолчанию при поиске его зависимостей.
Конечно, если это бесполезно, вы также можете попробовать включить вывод отладочной информации jni с помощью "-verbose: jni" в командной строке. Это может дать вам некоторые подсказки к проблеме.