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的主要内容,如果未能解决你的问题,请参考以下文章
JNI在应用程序中检测到错误:JNI FindClass调用挂起异常java.lang.NoSuchMethodError:没有非静态方法“Lchirpconnect / SDK