Java没有加载依赖库

时间:2016-10-18 23:51:27

标签: java c java-native-interface

我第一次尝试使用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!");
}

1 个答案:

答案 0 :(得分:0)

在这里查看一个简单的HelloWorld示例:

https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo001

(Linux的/ OSX)。

如果您想使用共享库,请确保JVM可以看到它。您可以使用:&#34; -Djava.library.path =&#34;或者你应该确保库在LD_LIBRARY_PATH上。