前言
调用jni的时候爆了这个错,找了半天,报的是方法错误,说明有找到dll文件,只是找不到方法,但是没整过jni就是一脸懵逼。
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.ocr.OcrEngine.getVersion()Ljava/lang/String;
at com.ocr.OcrEngine.getVersion(Native Method)
at ocr.Main.main(Main.java:112)
解决
折腾RapidOCR-JVM版的时候对demo进行了重构,这个错误研究了半天。然后没办法了下载c++源码查看,搜索 getVersion 找到
extern "C" JNIEXPORT jstring JNICALL
Java_com_benjaminwan_ocrlibrary_OcrEngine_getVersion(JNIEnv *env, jobject thiz) {
jstring ver = env->NewStringUTF(VERSION);
return ver;
}
一眼就明白了c++端的方法结构,马上反应过来java端的jni所在类的全类名被我改动了,类OcrEngine的路径必须对应上这串方法,也就是路径com.benjaminwan.ocrlibrary.OcrEngine。要么重新编译c++,要么按这个路径放类,即可解决。
最后
后面会更多扩展到其它语言领域,各司其职的联动确实有趣。