に私はこのトピックに関する同様の質問がある知っているが、答えのどれも私の問題を解決することができませんでした:エラーUbuntuでJNIを使用して:ます。java.lang.UnsatisfiedLinkErrorを:なし... java.library.pathに
私は私は、ヘッダファイルをコンパイルして生成するには、次の使用
class hjni {
static {
System.loadLibrary("hjni");
}
private native void print();
public static void main(String[] args) {
new hjni().print();
}
}
:javaファイルを持っている
:ここjavac hjni.java
javah -jni hjni
はC++ファイルであります
g++ -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux hjni.cpp -o hjni.so
ファイルhjni.class
、hjni.h
、およびhjni.so
がすべて作成されます:
#include <jni.h>
#include <stdio.h>
#include "hjni.h"
JNIEXPORT void JNICALL
Java_hjni_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
は、私はC++ファイルをコンパイルします。
私はJavaファイルを実行します。ここでは
java -Djava.library.path=. hjni
は私が取得エラーです:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hjni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1889)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at hjni.<clinit>(hjni.java:4)
私はjava.library.path
をチェックするjava -XshowSettings:properties
を使用します。
java.library.path = /usr/java/packages/lib/amd64
/usr/lib/x86_64-linux-gnu/jni
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/jni
/lib
/usr/lib
、フォルダ
ここcd /usr/java/packages/lib/amd64
bash: cd: /usr/java/packages/lib/amd64: No such file or directory
は私が共有ライブラリを見つけることができる(libjli.so):
/usr/java/packages/lib/amd64
は
は存在しません
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
私は
export LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
で上記のパスを追加するとき端末が開いている限り、パスは正常に追加されます。端末を閉じてもう一度開くと、追加されたパスはもう存在しません。私もhjni.so
をjli
フォルダにコピーしましたが、同じリンクエラーが発生しました。