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

时间:2016-02-08 00:49:51

标签: java c++ c java-native-interface

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

1 个答案:

答案 0 :(得分:0)

请查看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你找到了一个很好的起点。