2013-04-26 5 views
1

현재 JNI와 협력 중입니다. 내가 HelloJNI.java했다리눅스에서 jni (Cent6) : "main"스레드의 예외 java.lang.UnsatisfiedLinkError

  1. :

    나는 다음 일을했다. 단순히 libhello.so 라이브러리를 링크합니다.
    static { 
        System.loadLibrary("hello"); 
    } 
    
  2. 이 같은

. 물론 몸도 있지만 특별한 것도 없습니다.

  1. 나는 클래스 파일, C 파일 및 헤더 파일을 만들었습니다. 은 내가 libhello.so했다

    #javac HelloJNI.java 
    #javah -classpath /usr/guest/workspace/path/ -jni package.HelloJNI 
    no errors till now. 
    
  2. 을 명령했다.

    # gcc -shared -fpic -o libhello.so -I/usr/java/jdk1.7.0_21/include -I/usr/java/jdk1.7.0_21/include/linux HelloJNI.c 
    
  3. 이 프로젝트를 Eclipse에서 실행하면 아래와 같은 오류가 발생합니다.

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path 
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) 
        at java.lang.Runtime.loadLibrary0(Runtime.java:845) 
        at java.lang.System.loadLibrary(System.java:1084) 
        at org.owls.jni.HelloJNI.<clinit>(HelloJNI.java:7) 
    

나는이 일을 시도했지만 작동하지 않습니다.

# chcon -t texrel_shlib_t libhello.so 

읽어 주셔서 감사하고 지혜로운 해결책 :

  • 누군가가 PATH 일에 대해 이야기 D. 하지만 그 줄을 어디에 둘 것인지 이해할 수 없습니다.

답변

0

이 문제는 혼자서 해결했습니다.

원인은 javah 명령입니다.

나는 아래와 같이했다.

및 생성 된 헤더 파일의 메소드가 예상 한 것과 다릅니다.

나는

JNIEXPORT JNICALL void Java_HelloJNI_say(JNIEnv* env, jobject j){} 

하지만 아래에 실제로 발생하는 뭔가를 기대합니다.

JNIEXPORT JNICALL void Java_org_owls_HelloJNI_say(JNIEnv* env, jobject j){} 

이것이 내 문제의 주된 이유입니다.

나는 내 자신을 버렸지 만 내 문제를 공유하는 사람에게 많은 감사를드립니다.

좋은 하루 되십시오. D

관련 문제