java.lang.UnsatisfiedLinkError dll.HelloJNI.sayHello () V

При вызове DLL из Java я получил эту ошибку

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();

}

Вот мой код C для DLL.

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

для MinGWC использую

gcc -Wl, — add-stdcall-alias -I «\ include» -I «\ include \ win32» -shared -o 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.
#

3

Решение

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

3

Другие решения

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

-1

попробуйте скомпилировать с использованием 64-битного компилятора, например «x86_64-w64-mingw32-g ++». У меня возникла та же ошибка, и ошибка исправлена ​​…

-1
По вопросам рекламы [email protected]