1

我现在正在使用 JNI。

我做了以下事情:

  1. 我制作了 HelloJNI.java。它只是链接库 libhello.so。

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

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

  1. 然后我制作了类文件,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 的事情。但我不明白该放在哪里。
4

2 回答 2

0
于 2013-04-29T03:35:16.173 回答
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){}

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

尽管我放弃了自己,但非常感谢分享我的问题的人。

祝你有美好的一天 :D

于 2013-05-03T06:19:16.777 回答