我第一次尝试使用JNI,但是当我运行我的java程序时,我继续使用UnsatisfiedLinkError
。错误说它无法找到我的依赖库。我确实看到了问题JNI Hello World Unsatisfied Link Error,但他们的建议不起作用。作为附注,我没有微软的视觉工作室,我在Windows 10上运行。
我正在使用以下命令来编译和运行我的程序:
javac HelloWorld.java
javah HelloWorld
gcc -Wl,--add-stdcall-alias -I"C:/Program Files/Java/jdk1.8.0_91/include" -I"C:/Program Files/Java/jdk1.8.0_91/include/win32" -shared -o HelloWorld.dll HelloWorld.c
java -Djava.library.path=. HelloWorld
源代码:
Java Source(HelloWorld.java
):
public class HelloWorld {
static {
System.loadLibrary("HelloWorld");
}
private static native void sayHello();
public static void main(String[] args) {
sayHello();
}
}
生成的头文件(HelloWorld.h
):
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
C档案(HelloWorld.c
):
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jclass cls) {
printf("C says hello!");
}
答案 0 :(得分:0)
在这里查看一个简单的HelloWorld示例:
https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo001
(Linux的/ OSX)。
如果您想使用共享库,请确保JVM可以看到它。您可以使用:&#34; -Djava.library.path =&#34;或者你应该确保库在LD_LIBRARY_PATH上。