Java JNI 错误 java.lang.UnsatisfiedLinkError: xxxx()V

Posted

技术标签:

【中文标题】Java JNI 错误 java.lang.UnsatisfiedLinkError: xxxx()V【英文标题】:Java JNI error java.lang.UnsatisfiedLinkError: xxxx()V 【发布时间】:2016-02-08 00:49:51 【问题描述】:

我今天在JNI 上度过了一段艰难的时光,基本上我想做的是将OpenAlpr 集成到我的Java 项目中,我使用的是预编译的二进制文件,当我运行java_test.bat 文件时它可以完美运行。起初Java一直告诉我它找不到openAlprJni,然后我将dlls的路径添加到我的构建路径和系统路径中,之后我开始体验openAlprJni.Alpr.initialize(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V,根据文档,这意味着库本身就是不行,但是测试程序运行就可以了,我查看了各种论坛,甚至和OpenAlpr的作者交谈过,但仍然无法解决这个问题,这里有没有遇到类似问题的人帮我解决这?提前致谢。

【问题讨论】:

【参考方案1】:

请查看com.openalpr.jni.Alpr。在第 12 行你会发现:

private native void initialize(String country, String configFile, String runtimeDir);

此方法与标头com_openalpr_jni_Alpr.h匹配:

/*
 * Class:     com_openalpr_jni_Alpr
 * Method:    initialize
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_openalpr_jni_Alpr_initialize(JNIEnv *, jobject, jstring, jstring, jstring);

你会看到你“体验”的只是这个initialize方法的方法签名,它返回void并接受三个Ljava/lang/String;类型的参数。

您可能在将示例添加到工作区时破坏了示例(检查包名称)。请注意,您使用的 *.dll 可能是针对 com_openalpr_jni_Alpr 而不是 jni_Alpr 编译的。

我强烈建议你学习 JNI 概念,here 你会找到一个很好的起点。

【讨论】:

谢谢你,我通常避免使用 JNI,它总是在使用它,我会看看它,再次感谢。

以上是关于Java JNI 错误 java.lang.UnsatisfiedLinkError: xxxx()V的主要内容,如果未能解决你的问题,请参考以下文章

[c的JNI调用java导致分段错误(内核已转储)

当从属共享库包含符号时 ,Java JNI“符号查找错误”

Java无法加载JNI共享库[重复]

JNI在应用程序中检测到错误:JNI FindClass调用挂起异常java.lang.NoSuchMethodError:没有非静态方法“Lchirpconnect / SDK

c++ 中的 JNI CallIntMethod 返回错误值

JNI开发常见错误