EDIT3: Вызывает проблему вызывающие флаги компилятора, если я компилирую из командной строки, используя компилятор Microsoft, он работает нормально. Кто-нибудь знает, что мне нужно изменить в code :: blocks, чтобы исправить эту проблему?
Когда я запускаю свой код, я получаю UnsatisfiedLinkError. Шаг загрузки работает нормально, я получаю сообщение об ошибке, когда он на самом деле вызывает код.
Начал с пути к моей dll
java -Djava.library.path=E:\Java\JNIHellowWorld\PasswordGenHW\bin\Debug -jar dist\JNIHellowWorld.jar
Исключение
Exception in thread "main" java.lang.UnsatisfiedLinkError: jnihellowworld.Main.HelloWorld()Ljava/lang/String;
at jnihellowworld.Main.HelloWorld(Native Method)
at jnihellowworld.Main.main(Main.java:16)
Java-код
package jnihellowworld;
import java.io.IOException;
public class Main {
public native String HelloWorld() throws Error;
public static void main(String[] args) throws IOException {
try
{
System.loadLibrary("PasswordGenHW");
String test = new Main().HelloWorld(); //errors on this line
System.out.println(test);
System.in.read();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
C ++ header
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jnihellowworld_Main */
#ifndef _Included_jnihellowworld_Main
#define _Included_jnihellowworld_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jnihellowworld_Main
* Method: HelloWorld
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jnihellowworld_Main_HelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
C ++ cpp
#include "jnihellowworld_Main.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_jnihellowworld_Main_HelloWorld
(JNIEnv *env, jobject obj)
{
return env->NewStringUTF("Hello world!");
}
Я использую Code :: Blocks и GCC для завершения dll.
РЕДАКТИРОВАТЬ: Вот мусорная корзина / экспорт DLL
2 1 000011D8 Java_jnihellowworld_Main_HelloWorld@8
EDIT2: упрощенный проект для дублирования ошибок с использованием system.loadLibrary ()