尝试创建一个简单的JNI程序,但总是得到异常: 线程“main”中的异常java.lang.UnsatisfiedLinkError:libLearningAccessJNI.sayHello()J在调用里面的方法时。
以下是我的java代码的快照:
public class LearningAccessJava
{
static
{
System.load("C:/vob/Debug/libLearningAccessJNI.dll");
}
// Declare native method
private native void sayHello();
// Test Driver
public static void main(String[] args)
{
try
{
LearningAccessJava testJava = new LearningAccessJava();
testJava.sayHello();
}
catch (UnsatisfiedLinkError e)
{
// Always get this exception
}
}
}
libLearningAccessJNI.dll是我通过编译下面的cpp和h代码创建的dll。 这是我的c ++ LearningAccessJNI.cpp和h文件
的快照#include <jni.h>
#include <iostream>
#include <ostream>
#include <stdio.h>
#include "LearningAccessJava.h"
using namespace std;
JNIEXPORT void JNICALL Java_LearningAccessJava_sayHello(JNIEnv *env, jobject thisObj)
{
printf("Hello World TEst\n");
//cout << "TEST TEST " << endl;
return;
}
这是我使用javah创建的LearningAccessJava.h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class LearningAccessJava */
#ifndef _Included_LearningAccessJava
#define _Included_LearningAccessJava
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: LearningAccessJava
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_LearningAccessJava_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
答案 0 :(得分:0)
您能为我们提供您用于编译cpp文件的gcc命令行吗?确保:
-Wl,--add-stdcall-alias
和-shared
。"C:/vob/Debug/libLearningAccessJNI.dll"