
JNIを使ってライブラリを呼び出すとき,
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path
というようにライブラリが見つからないエラーが出て困っています.
【Javaのコード】
[*****@**** jnitest]$ vi HelloWorldJNI.java
public class HelloWorldJNI {
static {
System.loadLibrary("HelloWorldJNIlib");
}
public native void sayHelloWorld();
public static void main(String[] args) {
HelloWorldJNI hello = new HelloWorldJNI();
hello.sayHelloWorld();
}
}
【Cのコード】
[*****@**** jnitest]$ vi HelloWorldJNI.c
#include "HelloWorldJNI.h"
JNIEXPORT void JNICALL
Java_HelloWorldJNI_sayHelloWorld (JNIEnv *env,
jobject obj ) {
printf("Hello World");
}
【手順】
[*****@**** jnitest]$ javac HelloWorldJNI.java
[*****@**** jnitest]$ ls
HelloWorldJNI.c HelloWorldJNI.class HelloWorldJNI.java
[*****@**** jnitest]$ javah HelloWorldJNI
[*****@**** jnitest]$ ls
HelloWorldJNI.c HelloWorldJNI.class HelloWorldJNI.h HelloWorldJNI.java
[*****@**** jnitest]$ gcc -fPIC -shared -I/usr/lib/jvm/java-1.6.0/include/ -I/usr/
lib/jvm/java-1.6.0/include/linux/ HelloWorldJNI.c -o HelloWorldJNIlib.so
[*****@**** jnitest]$ ls
HelloWorldJNI.c HelloWorldJNI.h HelloWorldJNIlib.so
HelloWorldJNI.class HelloWorldJNI.java
[*****@**** jnitest]$ export LD_LIBRARY_PATH=.
[*****@**** jnitest]$ java HelloWorldJNI
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1698)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at HelloWorldJNI.<clinit>(HelloWorldJNI.java:3)
[*****@**** jnitest]$ java -Djava.library.path=. HelloWorldJNI
Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1698)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at HelloWorldJNI.<clinit>(HelloWorldJNI.java:3)
[*****@**** jnitest]$
何を見直すべきかおわかりの方いらっしゃいませんでしょうか.
No.1ベストアンサー
- 回答日時:
JNIは門外漢なのですが。
http://www.hellohiro.com/native.htm
↑のサイトを参照すると「Linuxの場合はダイナミックリンクライブラリのファイルの名前の先頭にlibとつけなければなりません。」
という記述があります。
[*****@**** jnitest]$ gcc -fPIC -shared -I/usr/lib/jvm/java-1.6.0/include/ -I/usr/
lib/jvm/java-1.6.0/include/linux/ HelloWorldJNI.c -o HelloWorldJNIlib.so
↑コマンドのHelloWorldJNIlib.soの部分をlibHelloWorldJNI.so
にしてみてはいかがでしょうか?
ご回答ありがとうございました.
すみません,そのページを参考にしていたのにlibの件見落としていました...
ファイル名をlibで始まるように変更したところうまくいきました.
Javaで呼ぶ方では「lib」付けなくていいんですね.
[****@***** jnitest]$ vi HelloWorldJNI.java
public class HelloWorldJNI {
static {
System.loadLibrary("HelloWorldJNI");
}
public native void sayHelloWorld();
public static void main(String[] args) {
HelloWorldJNI hello = new HelloWorldJNI();
hello.sayHelloWorld();
}
}
[****@***** jnitest]$ gcc -fPIC -shared -I/usr/lib/jvm/java-1.6.0/include/ -I/usr/
lib/jvm/java-1.6.0/include/linux/ HelloWorldJNI.c -o libHelloWorldJNI.so
[****@***** jnitest]$ ls
HelloWorldJNI.c HelloWorldJNI.h libHelloWorldJNI.so
HelloWorldJNI.class HelloWorldJNI.java
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaからデータベースに接続 エ...
-
Javaでのエラーについて
-
javaサーブレット upload時
-
JavaMail関係でエラーが出ます
-
vba クリップボードクリアにつ...
-
javaのジェネリックスでTとEの...
-
ベータバージョンの記載の仕方
-
IISワーカープロセスが原因でCP...
-
VBAでDVDのトレイを開く。、
-
エクリプスのプログラミングに...
-
超恥愚問ですが、CとC++の間に...
-
オブジェクト指向について
-
txt2assのダウンロードができない
-
JSPファイルで生じるエラーをど...
-
Pure Javaとは?
-
使用しているJUnitのバージョン...
-
gccのバージョンを下げる方法
-
【javaコンパイル時のエラーに...
-
プリクラの様な画像処理(webカ...
-
Visual Studio 2008のライセンス
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaでのエラーについて
-
javaからデータベースに接続 エ...
-
java と javax の違いは?
-
struts2環境構築で不具合が出て...
-
マイクロソフトのコミュミティ...
-
autoCAD2017で面積を計測して、...
-
Win32 API メニューのfType,fMa...
-
Tomcatでエラー
-
DBから全権検索したデータをjsp...
-
propertiesが読み込めなくてnul...
-
マイクラ Ender IO 入れたらク...
-
マイクラがクラッシュします。
-
System.inをClose()すると例外...
-
JasperExceptionのエラーログの...
-
$_SERVER['HTTP_USER_AGENT'] ...
-
JSFで、マネージビーンに画面の...
-
javacのコンパイルでファイルが...
-
BufferedInputStreamのreadメソ...
-
log4jを使用し、JAVAのバッチプ...
-
【javadoc】パッケージを一括で...
おすすめ情報