当前位置: 技术问答>linux和unix
请教一个简单的 JNI 问题,关于UnsatisfiedLinkError,清大侠赐教!!!
来源: 互联网 发布时间:2016-02-19
本文导语: 下面是我的一个简单的JNI程序: 1. 编写HelloWorld.java 如下: class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] ar...
下面是我的一个简单的JNI程序:
1. 编写HelloWorld.java 如下:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
2. javac HelloWorld.java,生成HelloWorld.class
3. javah -jni HelloWorld,生成HelloWorld.h,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#ifndef __HelloWorld__
#define __HelloWorld__
#include
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *env, jobject);
#ifdef __cplusplus
}
#endif
#endif /* __HelloWorld__ */
4. 编写HelloWorld.c,如下:
#include
#include "HelloWorld.h"
#include
#include
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *env, jobject obj)
{
printf("Hello World ~~~~~~~~~~rn");
}
5. 编译,生成动态链接库文件libhello.so
gcc -o libhello.so -shared -Wl,-soname,libnative.so -I/usr/java/jdk1.6.0_02/include -I/usr/java/jdk1.6.0_02/include/linux HelloWorld.c -static -lc
或者用makefile,如下:
libhello.so : HelloWorld.o makefile
gcc -Wall -rdynamic -shared -o libhello.so HelloWorld.o
HelloWorld.o : HelloWorld.c HelloWorld.h
gcc -Wall -c HelloWorld.c -I./ -I/usr/java/jdk1.6.0_02/include -I/usr/java/jdk1.6.0_02/include/linux
clean :
rm -rf *.o *.so
6. 运行java HelloWorld,结果都是出现下面的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: libhello: libhello.so: æ æ³æå¼å ±äº«å¯¹è±¡æ件: 没æé£ä¸ªæ件æç®å½
at java.lang.Runtime._load(libgcj.so.7rh)
at java.lang.Runtime.loadLibrary(libgcj.so.7rh)
at java.lang.System.loadLibrary(libgcj.so.7rh)
at HelloWorld.(HelloWorld.java:5)
at java.lang.Class.initializeClass(libgcj.so.7rh)
这个问题应该如何解决呢?各位大侠,帮帮忙吧!!!
我的系统是x86 FC6
1. 编写HelloWorld.java 如下:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
2. javac HelloWorld.java,生成HelloWorld.class
3. javah -jni HelloWorld,生成HelloWorld.h,如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#ifndef __HelloWorld__
#define __HelloWorld__
#include
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *env, jobject);
#ifdef __cplusplus
}
#endif
#endif /* __HelloWorld__ */
4. 编写HelloWorld.c,如下:
#include
#include "HelloWorld.h"
#include
#include
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *env, jobject obj)
{
printf("Hello World ~~~~~~~~~~rn");
}
5. 编译,生成动态链接库文件libhello.so
gcc -o libhello.so -shared -Wl,-soname,libnative.so -I/usr/java/jdk1.6.0_02/include -I/usr/java/jdk1.6.0_02/include/linux HelloWorld.c -static -lc
或者用makefile,如下:
libhello.so : HelloWorld.o makefile
gcc -Wall -rdynamic -shared -o libhello.so HelloWorld.o
HelloWorld.o : HelloWorld.c HelloWorld.h
gcc -Wall -c HelloWorld.c -I./ -I/usr/java/jdk1.6.0_02/include -I/usr/java/jdk1.6.0_02/include/linux
clean :
rm -rf *.o *.so
6. 运行java HelloWorld,结果都是出现下面的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: libhello: libhello.so: æ æ³æå¼å ±äº«å¯¹è±¡æ件: 没æé£ä¸ªæ件æç®å½
at java.lang.Runtime._load(libgcj.so.7rh)
at java.lang.Runtime.loadLibrary(libgcj.so.7rh)
at java.lang.System.loadLibrary(libgcj.so.7rh)
at HelloWorld.(HelloWorld.java:5)
at java.lang.Class.initializeClass(libgcj.so.7rh)
这个问题应该如何解决呢?各位大侠,帮帮忙吧!!!
我的系统是x86 FC6
|
你可以试一下:
java -Djava.library.path=. HelloWorld
java -Djava.library.path=. HelloWorld