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

私はこの問題を自分で解決しました。

原因は 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 に答える