问题描述:
Windows环境,使用tess4j.jar进行OCR识别,tess4j中使用JNA加载gsdll32.dll、liblept171.dll和libtesseract304.dll三个文件。
在Eclipse开发环境下,编译运行没有问题。打包成runnabs 6 Mle jar后,运行会有“找不到指定模块”异常,P C 5如图
调试过程:
dll文件依赖关系
libtesseract304.A | ] 3 . 3 Gdll文件依赖liblept171.dll,另外一个不清$ u X u d楚。
tess4j使用JNA加载DLL过程
分析tess4j使用JNA的源代码,tess4j.jar中包含以上三个dll文件,tess4j将三个dll文件从jar中拷贝到文件系统(C:\Users\sonN = Q g Y –ggeb\AppData\Local\Temp\tess4j\win321 ? v | a f i u-x86),然后“jna.library.path”属性设置为以上路径,_ B t – e执行Native.loadLibrary(“libtesseract304”, TessAPI.class)语句进行加载。
Demo调试
新建工程,使用JNA单独加载“libtess) + \eract304.dll”y g u Q y I 4 l ~进行调试。人为设置“jna.library.B 0 M vpath”属性的值为本地文件系统某一路径。开3 M y D h j 2启JNA的debug模式(System.setProperty(“jna.debug_load”,”true”))。
1. Eclipse开发环境下运行,能够找到libtesV ? ^ M ] j A N Sseract304.dll,成功加载w 9 ^ G l #。
2. 打包成Runnable Jar后运行,报异常,如图。
疑问:尽管设置了“jna.library.path”,但仍然找不到。
3. 将三个dll文件放入Runnable Jar文件根目录下执行,能够找到libtesseract304.dll,但仍报异常,如图