2013-10-03 2 views
0
에 이클립스에 자바에서 파일을로드 할 수 없습니다

나는 다음과 같은 C 라이브러리를로드하려고 몇 가지 코드를 가지고있다 -그래서 우분투

내가 프로젝트를 만들려고 다음과 같은 오류가 그러나
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) 

현재 작업 디렉토리는 so 파일이있는 곳입니다. 또한 내 파일을 가리 키도록 LD_PRELOAD 변수를 수정하려고 시도했다. 그러나 오류가 지속됩니다.

dylib는 현재 파일 (프로젝트 루트)이있는 정확한 위치에있는 내 OSX에서 올바르게 작동합니다. 내가 뭘 잘못하고 있니?

답변

1

LD_PRELOAD은 동일한 공유 라이브러리의 특정 버전을 다른 버전보다 우선하려는 경우에 사용되며 여기서는 적용되지 않습니다.

프로젝트 루트를 가리 키도록 jna.library.path을 정의하면 JNA가이를 찾을 수 있습니다.

또한 라이브러리가 libctest.so으로 만들어졌으며 부주의로 libctest.dylib으로 지정되지 않았는지 확인하십시오.

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

하지 :

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

은 따라서 당신이 JNA는 LIB와 후위의 접두사를 추가 참조 그것은 당신이 뭔가를 사용하는 의미

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

: 예외에서

1

.so가 libctest (liblibctest.so)에 추가되었습니다.