2013-04-26 49 views
1

现在我用JNI工作。JNI在linux(Cent6):异常线程 “main” java.lang.UnsatisfiedLinkError中

我做了如下的事情:

  1. 我做HelloJNI.java。它只是链接库libhello.so。

    static { 
        System.loadLibrary("hello"); 
    } 
    

这样。当然我也有身体,但没什么特别的。

  1. 然后我做了class文件,C文件和头文件。 我吩咐

    #javac HelloJNI.java 
    #javah -classpath /usr/guest/workspace/path/ -jni package.HelloJNI 
    no errors till now. 
    
  2. 我做libhello.so。

    # 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 

感谢您的阅读,你的明智的解决方案:d

  • 有人谈论PATH的事情。但我不明白该放哪一行。

回答

0

我自己解决了这个问题。

其原因是javah命令。

我的确如下。

javah -classpath /home/guest/workspace/.../src org.owls.HelloJNI. 

生成的头文件中的方法与我所期望的不同。

我希望像

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

但低于实际产生。

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

这是我的问题的主要原因。

eventhough我抛出了自己,但人谁分享我的问题非常感谢。

有一个美好的一天:d

相关问题