Загрузка 2 .so нативных библиотек в Linux из Java через JNI - PullRequest
2 голосов
/ 21 декабря 2011

У меня проблемы с загрузкой двух библиотек, где одна зависит от другой в Linux.Допустим, у меня есть 2 libs, libA.so и libB.so, libB.so зависит от libA.so (вызывая из него функции).

Мне нужно загрузить libB.so из Java через JNI и вызвать нескольконативные методы из него.

Итак, я пытаюсь сделать следующее:

static {
    System.loadLibrary(A);
    System.loadLibrary(B);
}

(обе библиотеки находятся в java.library.path).

Под Win32, он работает нормально - B.dll видит, что A.dll уже загружен, и не пытается загрузить его сам (с помощью поиска PATH).

В то время как в Linux он не работает.Дополнительная регистрация показывает, что System.loadLibrary (A);выполняется правильно, и libA.so загружается нормально, тогда, когда мы пытаемся загрузить B, он ищет библиотеку libA.so в LD_LIBRARY_PATH, и она завершается неудачно (обе библиотеки находятся в java.library.path, но НЕ вLD_LIBRARY_PATH).

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

Я вижу много способов обойти это, но сначала хочу понять суть этого.

Спасибо, Михаил

...