2013-10-03 4 views
0

У меня есть некоторый код, который пытается загрузить библиотеку C следующим образом: -Невозможно загрузить файл с таким Java в Eclipse, на Ubuntu

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class); 
} 

Однако я получаю следующее сообщение об ошибке при попытке построить проект; Я получаю ошибку следующим образом: -

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory 
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239) 
    at com.sun.jna.Library$Handler.<init>(Library.java:140) 
    at com.sun.jna.Native.loadLibrary(Native.java:393) 
    at com.sun.jna.Native.loadLibrary(Native.java:378) 
    at com.threads.ThreadAffinity.<init>(ThreadAffinity.java:11) 
    at com.threads.ThreadAffinity.main(ThreadAffinity.java:45) 

текущий рабочий каталог является корнем проекта и то, где так находится файл. Я также попытался изменить переменную LD_PRELOAD, чтобы указать на мой файл; однако ошибка сохраняется.

Он отлично работает на моем OSX, где dylib находится именно там, где сейчас находится файл (корень проекта). Что я делаю неправильно?

ответ

1

LD_PRELOAD используется, если вы хотите предпочесть одну конкретную версию одной и той же общей библиотеки поверх другой, что здесь не применяется.

Определите jna.library.path, чтобы указать на свой корень проекта, и JNA должна быть в состоянии его найти.

Также убедитесь, что ваша библиотека была построена как libctest.so и не была непреднамеренно названа libctest.dylib.

1

Из за исключением:

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory 

Это означает, что вы использовали что-то вроде:

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("libctest", CTest.class); 
} 

и нет:

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class); 
} 

поэтому вы видите ЮНА добавлен префикс Lib и постфикса .so добавлено в libctest (liblibctest.so)

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