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

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

请查看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;类型的三个参数Ljava/lang/String;

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

我认真地建议你学习JNI概念, 在这里你找到了一个很好的起点。