【发布时间】:2014-11-19 02:35:03
【问题描述】:
.h 文件
#include <jni.h>
#include "NativePackage_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) {
printf("Hello world!\n");
return;
}
Java
package NativePackage;
public class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
.c 文件
#include <jni.h>
#include "NativePackage_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
printf("Hello world!\n");
return;
}
我已经使用
编译了我的 .c 文件gcc -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/ -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/darwin/ -fPIC -o hello -c HelloWorldImp.c
但是,尝试使用 java NativePackage/HelloWorld 运行会产生以下错误:
java -Djava.library.path=NativePackage/ NativePackage/HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at NativePackage.HelloWorld.<clinit>(HelloWorld.java:7)
我在 MAC OS X 10.10 上运行
【问题讨论】:
-
应该是
java -Djava.library.path=NativePackage/ NativePackage.HelloWorld。你把“hello”共享库放在哪里了? -
在 NativePackage/ 中,我也不确定共享库的命名是否应该只是 hello 或 libhello.so
-
尝试使用
-shared标志编译,Mac OS X上库的命名方案为libXXX.dylib -
谢谢 Samuel,你的回答是正确的。
标签: java java-native-interface unsatisfiedlinkerror