[Linux] Загрузка .so файла для JNI приводит к: java.lang.UnsatisfiedLinkError: нет libdebug в java.library.path - PullRequest
0 голосов
/ 21 апреля 2011

Мне нужно, чтобы в моем приложении Java вызывался некоторый нативный код C ++, поэтому я использую 'System.loadLibrary (String)' для загрузки требуемого файла .so, но когда я пытаюсь выполнить приложение Java из Eclipse, я получаю эту ошибкусообщение:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libdebug in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at org.server.util.Debug.<clinit>(Debug.java:5)
    at org.server.Server.main(Server.java:18)

Значение свойства пути к библиотеке:

java.library.path="/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/client:/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386"

И я поместил libdebug.so в /home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386 /.Файл .so был скомпилирован следующим образом:

g++ -I /home/benjamin/Downloads/jdk1.6.0_24/include 
    -I /home/benjamin/Downloads/jdk1.6.0_24/include/linux -fPIC -c debug.cpp 
    -o /home/benjamin/workspace/server/bin/linux-x86/debug.o

и связан следующим образом:

ld -shared -soname Debug.so.1 -o Debug.so.1.0 -lc debug.o

1 Ответ

2 голосов
/ 21 апреля 2011

Если вы позвоните System.loadLibrary("foo"), JVM будет искать общую библиотеку с именем libfoo.so в Unix и foo.dll в Windows.

Вы звоните в свою общую библиотеку Debug.so.1.0 по этой ссылкеline.

Попробуйте переименовать вашу библиотеку в libDebug.so (или создать символическую ссылку с Debug.so.1.0 на libDebug.so), а затем измените строку исходного кода на System.loadLibrary("Debug"); и скажите нам, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...