2013-10-09 3 views
2

В то время как вызов DLL из Явы я получаю эту ошибкуjava.lang.UnsatisfiedLinkError dll.HelloJNI.sayHello() V

Exception in thread "main" java.lang.UnsatisfiedLinkError: dll.HelloJNI.sayHello()V 
at dll.HelloJNI.sayHello(Native Method) 
at dll.HelloJNI.main(HelloJNI.java:7) 

Вот мой код Java

public class HelloJNI { 
public static void main(String[] args) { 
    HelloJNI h = new HelloJNI(); 
    h.sayHello(); // invoke the native method 
    } 

static { 
    try{ 
     System.load("D://Program Files//Java//jdk1.7.0_40//bin//hello.dll"); // hello.dll (Windows) or libhello.so (Unixes) 
    } 
    catch (UnsatisfiedLinkError e) { 
      System.err.println("Native code library failed to load.\n" + e); 
      System.exit(1); 
     } 

    } 
    private native void sayHello(); 

} 

Вот мой с код для dll.

Я использует GCC компилятор для генерации DLL

для MinGWC я использует

НКИ-, - надстройка STDCALL-псевдоним -I "\ включить" -I "\ Include \ win32" -shared -о hello.dll HelloJNI.c

#include <jni.h> 
#include <stdio.h> 
#include "HelloJNI.h" 

JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) { 
    printf("Hello World!\n"); 
    return; 
} 

меня удалить DLL пакет и во время выполнения я получил эту ошибку

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x610d70b4, pid=1720, tid=1160 
# 
# JRE version: Java(TM) SE Runtime Environment (7.0_40-b43) (build 1.7.0_40-b43) 
# Java VM: Java HotSpot(TM) Client VM (24.0-b56 mixed mode, sharing windows-x86) 
# Problematic frame: 
# C [cygwin1.dll+0xd70b4] 
# 
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows 
# 
# If you would like to submit a bug report, please visit: 
# http://bugreport.sun.com/bugreport/crash.jsp 
# The crash happened outside the Java Virtual Machine in native code. 
# See problematic frame for where to report the bug. 
# 
+0

Показать исходный код для DLL. – Joni

+0

Не помещайте свои собственные двоичные файлы в папки других людей. – EJP

ответ

2

Вы добавили имя пакета с момента создания кода C. Имя пакета теперь dll, но когда вы сгенерировали его, его не было. Повторите и настройте свой C-код соответственно, чтобы он соответствовал новому файлу .h.

0

Удалить printf и вместо этого попытаться вернуть некоторое значение или строку из вашего файла cpp и попытаться распечатать его из java-файла.

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