2012-03-28 8 views
4

linux ubuntuのJNIを使​​ってJavaプログラムからCプログラムを呼び出したい。JNIを使​​用しているときにUnsatisfiedLinkError?

私はこれに新しく、http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html で与えられたサンプルプログラムを試しました。私は既に.java、.h、.c、.soファイルを作成しています。しかし、私はプログラムを実行しようとすると、私は次のエラーを取得しています。

Exception in thread "main" java.lang.UnsatisfiedLinkError: no Sample1 in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    at java.lang.System.loadLibrary(System.java:1028) 
    at Sample1.main(Sample1.java:13)
+0

"Sample1"と呼ばれるものがありません。共有オブジェクトが作成され、指定されたパスにあることを確認します。 –

+0

@poonam Hoshi:ライブラリをjvmに渡すために使用される共有ライブラリとコマンドライン/ LD_LIBRARY_PATHの作成手順を記述してください。 – Jayan

+0

libSample.soとLD_LIBRARY_PATHはどこですか? – jogabonito

答えて

3

この例外は、.soがJVMで使用できないことを示しています。

が存在するディレクトリをLD_LIBRARY_PATHに追加するとこれが解決されます。 .soが他の.soライブラリに依存する場合、.soが存在するディレクトリもLD_LIBRARY_PATHに追加する必要があります。

+2

ライブラリパスを設定しようとしましたが、働いていない。私のubuntuバージョンはUbuntu 10.04.4 LTSです。私はちょうど他のサイトからこのバージョンのubuntu LD_LIBRARY_PATHがもう働かないことを学んだ。これを解決するのを助けてください。そして助けをありがとう。 –

3

私はちょうど私のCentOSで動作するように同じサンプルを取得しようとしていると同じエラーが発生しました。すでに答えられているように、JVMは必要なファイルを見つけられませんでした。私はそれがGCCを使用して以下の手順で仕事を得ることに成功しました:

$ javac Sample1.java 
$ javah Sample1 
$ # Include paths must also be specified using -I option in the following gcc command line! 
$ gcc -shared -I...snip... Sample1.c -o libSample1.so 
$ # Library path for libSample1.so must also be specified! 
$ java -Djava.library.path=...path/to/libSample1.so... Sample1 

共有ライブラリの「LIB」接頭辞を省略した場合、JVMが何らかの理由でそれを見つけることができません。 私は理由を知らない。私はLinuxの共有ライブラリの命名規則に慣れていません。

この投稿が役に立ったらうれしいです。

+0

あなたの答えをありがとうが、私はまだエラーを解決することができません。私のubuntuバージョンはUbuntu 10.04.4 LTSです。 –

+0

"-Djava.library.path = ..."では、lib自体はなく、libSample1.soへのパスだけです! – rmv

関連する問題