调用方法时JNI C ++ UnsatisfiedLinkError

时间:2014-12-08 23:15:09

标签: java c++ java-native-interface

我一直在尝试用C ++创建一个简单的JNI测试。对于Java,我使用的是Eclipse,对于C ++,我使用的是Visual Studio 2013.我按照StackOverFlow上其他页面上的说明进行操作,但似乎没有任何效果。当我尝试在C ++中列出的java中调用本机方法时发生错误。

感谢您的时间。

Header.h

#include <jni.h>;
using namespace std;
#ifndef Header
#define Header
JNIEXPORT void JNICALL Java_base_Main_print(JNIEnv *env, jobject obj);
#endif

Edited Header.h(有效的解决方案)

#include <jni.h>;
using namespace std;

#ifndef Header
#define Header

extern "C" {
JNIEXPORT void JNICALL Java_base_Main_print(JNIEnv *env, jobject obj);
}
#endif

JNIHelloWorld.cpp

#include "Header.h";

JNIEXPORT void JNICALL Java_base_Main_print(JNIEnv *env, jobject obj) {
    printf("This is a JNI tester\n");
    //return;
}

JavaCode

package base;
public class Main {
    static {System.loadLibrary("JNIHelloWorld");}
    public static void main(String args[]){
        Main m = new Main();
        m.print();
    }
    public native void print();
}

错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: base.Main.print()V
    at base.Main.print(Native Method)
    at base.Main.main(Main.java:9)

1 个答案:

答案 0 :(得分:3)

尝试#extern&#34; c&#34;围绕JNI代码。{/ p>

通过查看DLL的导出来验证是否未涉及C ++名称修改。