JNI 在调用方法时C++不满意的链接错误

JNI C++ UnsatisfiedLinkError When Calling Method

本文关键字:不满意 链接 错误 C++ 调用 方法 JNI      更新时间:2023-10-16

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

谢谢你的时间。

标题.h

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

编辑了标题.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 testern");
    //return;
}

爪哇代码

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)
尝试在

JNI代码周围 #extern"c"{}。

通过查看 DLL 的导出进行验证,以查看未涉及C++名称重整。