2015-01-24 1 views
0

Я пытаюсь использовать скомпилированную библиотеку C++ в своем Java-коде. Я установил java.library.path в /usr/local/lib/, и у меня есть все файлы .so для установленных там библиотек.Не удается открыть файл общих объектов - библиотека C++ в Java

Однако, когда я пытаюсь запустить приложение Java я вижу следующее:

Native code library failed to load. 
java.lang.UnsatisfiedLinkError: /usr/local/lib/libA.so: libB.so.2.4: cannot open shared object file: No such file or directory 

Однако файл, кажется, есть:

ls /usr/local/lib/libB.so.2.4 
lrwxrwxrwx 1 root root 20 Jan 24 16:33 /usr/local/lib/libB.so.2.4 -> libB.so.2.4.5 

него символьные ссылки на файл также существует. Любая идея, почему эта библиотека не может быть найдена?

+0

Вы запустили 'sudo ldconfig'? –

+0

@ ElliottFrisch только что попробовал. Это не помогло – Oleksi

+1

Стоит проверить права доступа к файлам. Или вы можете использовать strace, чтобы увидеть, что он пытается сделать. Вы также можете проверить System.load() точное имя файла и посмотреть, не удалось ли/как это сделать, возможно, снова в режиме strace. –

ответ

2

Java удалось загрузить собственный код для библиотеки A (libA.so), и когда он бежал, что нативный код был зависимость от libB.so (впрочем, это в машинный код в этой точке - вне контроля JVMs). В этот момент вы должны использовать собственные библиотеки в системе. Обычный механизм должны установить LD_LIBRARY_PATH переменного окружение или использования ldconfig (за человеком страницу), который говорит, что в части

LDCONFIG создает необходимые ссылки и кэш для самых последних разделяемых библиотек, найденных в каталогах, заданных в строке в файле /etc/ld.so.conf и в доверенных каталогах (/ lib и/usr/lib). Кэш используется компоновщиком времени выполнения, ld.so или ld-linux.so.

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