gpt4 book ai didi

java - 线程 "main"java.lang.UnsatisfiedLinkError 中的异常

转载 作者:行者123 更新时间:2023-11-30 01:21:29 24 4
gpt4 key购买 nike

我在 Java 中测试 JNI 时收到以下显式错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Italk2learn.hello()V
at Italk2learn.hello(Native Method)
at Italk2learn.main(Italk2learn.java:10)

dll 或路径没有问题,因为我的 java 类的静态代码运行良好:

static {
try {
System.loadLibrary("Italk2learn");
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}

而且我认为它让图书馆变得很好。

我使用 JVM 32 位编译并获取 C++ header (javah) 和 C++ 的 MinGW32。在这两种情况下,我都将 Eclipse 用于 C++ 和 Java。

这是我的代码:

Java:

public class Italk2learn {

public native void hello();

public static void main(String[] args) {
System.out.println("Hello World Java!");
try {
new Italk2learn().hello();
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}
static {
try {
System.loadLibrary("Italk2learn");
} catch (Exception e) {
System.err.println(e);
System.exit(1);
}
}
}

C++:

#include <jni.h>
#include <stdio.h>
#include "italk2learn.h"

JNIEXPORT void JNICALL Java_Italk2learn_hello(JNIEnv *, jobject) {
printf("Hello World C++!\n");
#ifdef __cplusplus
printf("__cplusplus is defined\n");
#else
printf("__cplusplus is NOT defined\n");
#endif
return;
}

最佳答案

我找到答案了!似乎在 Windows 中使用 JNI 时,它会查找以 _Java_ 开头的函数,而在所有其他平台中,它会查找 Java_。为什么会这样而不是写在我不知道的文档中,但它使一切都完美运行!

当 javah 创建头文件时,每个函数都被命名为 Java_package_Class_method。奇怪的是,当像这样编译时,JNI 无法为本地方法找到正确的函数并吐出错误,但如果在 Java 之前添加下划线,那么 JNI 将能够找到该函数。

关于java - 线程 "main"java.lang.UnsatisfiedLinkError 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953991/

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