2016-10-18 3 views
0

Я пытаюсь использовать JNI в первый раз, но когда я запускаю свою программу java, я продолжаю получать UnsatisfiedLinkError. Ошибка говорит, что он не может найти мои зависимые библиотеки. Я видел вопрос JNI Hello World Unsatisfied Link Error, но их рекомендации не сработали. В качестве побочного сведению, я не владею Microsoft Visual Studio, и я бегу на окнах 10.Java не загружает зависимые библиотеки

Я использую следующие команды для того, чтобы скомпилировать и запустить свою программу:

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 Источник (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

Решение состоит в том, чтобы убедиться, что зависимые библиотеки доступны через PATH. – EJP

+0

По пути, вы имеете в виду переменные окружения или в самой команде? –

+0

Вы удостоверились, что JRE и библиотека имеют одинаковую архитектуру (32/64 бит)? – user2543253

ответ

0

Take посмотрите здесь простой пример HelloWorld:

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

(Linux/OSX).

Если вы хотите использовать общую библиотеку, убедитесь, что JVM ее видит. Вы можете использовать: «-Djava.library.path =» или вы должны убедиться, что библиотека находится на LD_LIBRARY_PATH.

Смежные вопросы