環境linux&gcc
設定, 檔案放在 /root/JNI_test 程式放在最後面
附上編譯執行過程, 請問小弟到底錯誤在哪裡呢?
設定LD_LIBRARY_PATH方面為
[root@AP-RH4u4x64 JNI_test]# LD_LIBRARY_PATH=/root/JNI_test
[root@AP-RH4u4x64 JNI_test]# export LD_LIBRARY_PATH
編譯方法
>javac HelloWorld.c
>javah -classpath . HelloWorld
>gcc -o libhello.so HelloWorld.c -shared -fPIC -I/usr/java/jdk1.5.0_09/include
-I/usr/java/jdk1.5.0_09/include/linux
執行錯誤訊息
[root@AP-RH4u4x64 JNI_test]# java -cp . HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError:
/root/JNI_test/libhello.so: /root/JNI_test/libhello.so: cannot open shared
object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:993)
at HelloWorld.<clinit>(HelloWorld.java:5)
[root@AP-RH4u4x64 JNI_test]#
我去下載的範例
/*HelloWorld.c*/
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject
obj)
{
printf("Hello world!\n");
return;
}
/*HelloWorld.java*/
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
--
┌─────◆KKCITY◆─────┐ ◢ ◤ ★ 線上音樂新震撼 ★ ◢ ◤
│ bbs.kkcity.com.tw │ ^_^ / 隨選隨播免等待 KKBOX◤ ^_^ /
└──《From:140.126.21.172 》──┘ ◤ http://www.kkbox.com.tw ◤
--
java 近期熱門文章
PTT數位生活區 即時熱門文章