gpt4 book ai didi

java - 调用方法时 JNI C++ UnsatisfiedLinkError

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:10 26 4
gpt4 key购买 nike

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

感谢您的宝贵时间。

标题.h

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

编辑 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;
}

Java代码

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++ 名称重整。

关于java - 调用方法时 JNI C++ UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com