Quarkus原生镜像在Linux下JNI方法调用解析失败求助
问题:Quarkus原生镜像模式下Tesseract调用Leptonica的pixReadMem方法失败
我使用Tesseract for Java进行OCR文本提取,该工具通过JNI原生调用Leptonica系统库。在Linux主机上以JVM模式运行Quarkus应用时,JNI方法调用可正常解析;但以原生镜像运行时,调用pixReadMem方法会抛出UnsatisfiedLinkError异常,提示找不到该方法。
原生镜像运行时堆栈跟踪
2022-12-16 08:20:29,736 ERROR [org.jbo.res.rea.com.cor.AbstractResteasyReactiveContext] (executor-thread-0) Request failed: java.lang.UnsatisfiedLinkError: Error looking up function 'pixReadMem': com.sun.jna.Native.findSymbol(JLjava/lang/String;)J [symbol: Java_com_sun_jna_Native_findSymbol or Java_com_sun_jna_Native_findSymbol__JLjava_lang_String_2] at com.sun.jna.Function.<init>(Function.java:252) at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:600) at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:576) at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:562) at com.sun.jna.Library$Handler.invoke(Library.java:243) at com.sun.proxy.$Proxy107.pixReadMem(Unknown Source) at com.itextpdf.pdfocr.tesseract4.TesseractOcrUtil.readPix(TesseractOcrUtil.java:662) at com.itextpdf.pdfocr.tesseract4.TesseractOcrUtil.readPix(TesseractOcrUtil.java:641) at com.itextpdf.pdfocr.tesseract4.ImagePreprocessingUtil.preprocessImage(ImagePreprocessingUtil.java:166) at com.itextpdf.pdfocr.tesseract4.Tesseract4LibOcrEngine.getOcrResultForSinglePage(Tesseract4LibOcrEngine.java:314) at com.itextpdf.pdfocr.tesseract4.Tesseract4LibOcrEngine.doTesseractOcr(Tesseract4LibOcrEngine.java:189) at com.itextpdf.pdfocr.tesseract4.AbstractTesseract4OcrEngine.processInputFiles(AbstractTesseract4OcrEngine.java:494) at com.itextpdf.pdfocr.tesseract4.AbstractTesseract4OcrEngine.doImageOcr(AbstractTesseract4OcrEngine.java:232) at es.gen.quarkus.ocr.service.TesseractService.extratTextFromJPG(TesseractService.java:42) at es.gen.quarkus.ocr.service.TesseractService_ClientProxy.extratTextFromJPG(Unknown Source) at es.gen.quarkus.ocr.service.OCRService.extractTextFromPDF(OCRService.java:34) at es.gen.quarkus.ocr.service.OCRService_ClientProxy.extractTextFromPDF(Unknown Source) at es.gen.quarkus.ocr.resource.OCRResource.extractTextFromPDF(OCRResource.java:46) at es.gen.quarkus.ocr.resource.OCRResource$quarkusrestinvoker$extractTextFromPDF_21209ffb320090ffe15503899b13ececc74cb601.invoke(Unknown Source) at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29) at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:114) at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base@11.0.17/java.lang.Thread.run(Thread.java:829) at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775) at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)
已尝试的无效方案
- 设置系统属性
java.library.path(当前值已包含Linux系统文件夹),问题未解决 - 设置系统属性
jna.debug_load=true,但未输出任何日志信息
内容的提问来源于stack exchange,提问作者Zeta
相关产品推荐
相关产品推荐

