Tomcat java.lang.UnsatifiedLinkError:访问被拒绝。使用JNI

Tomcat java.lang.UnsatifiedLinkError:访问被拒绝。使用JNI,tomcat,permissions,java-native-interface,windows-server-2008,tesseract,Tomcat,Permissions,Java Native Interface,Windows Server 2008,Tesseract,我正在努力使工作成为一个在项目中使用Tesseract的Javaservlet。初始化库主类(TessAPI)时,servlet停止,出现以下异常: java.lang.UnsatisfiedLinkError: Access is denied. com.sun.jna.Native.open(Native Method) com.sun.jna.Native.open(Native.java:1759) com.sun.jna.NativeLibrary.loadL

我正在努力使工作成为一个在项目中使用Tesseract的Javaservlet。初始化库主类(TessAPI)时,servlet停止,出现以下异常:

java.lang.UnsatisfiedLinkError: Access is denied.

    com.sun.jna.Native.open(Native Method)
    com.sun.jna.Native.open(Native.java:1759)
    com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
    com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    com.sun.jna.Library$Handler.<init>(Library.java:147)
    com.sun.jna.Native.loadLibrary(Native.java:412)
    com.sun.jna.Native.loadLibrary(Native.java:391)
    net.sourceforge.tess4j.TessAPI.<clinit>(Unknown Source)
    it.sampleProj.DocumentVisualizer.startOCRConfidence(DocumentVisualizer.java:301)
    it.sampleProj.DocumentVisualizer.startRecognition(DocumentVisualizer.java:220)
    it.sampleProj.DocumentIdentifier.recognizeDocument(DocumentIdentifier.java:147)
    it.sampleProj.DocumentIdentifier.startDocumentSearch(DocumentIdentifier.java:89)
    it.sampleProj.DocumentRecognizerServlet.doPost(DocumentRecognizerServlet.java:106)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
java.lang.UnsatisfiedLinkError:访问被拒绝。
com.sun.jna.Native.open(本机方法)
com.sun.jna.Native.open(Native.java:1759)
com.sun.jna.nativellibrary.loadLibrary(nativellibrary.java:260)
com.sun.jna.nativellibrary.getInstance(nativellibrary.java:398)
Library$Handler.(Library.java:147)
com.sun.jna.Native.loadLibrary(Native.java:412)
com.sun.jna.Native.loadLibrary(Native.java:391)
net.sourceforge.tess4j.TessAPI。(未知源)
it.sampleProj.DocumentVisualizer.startOCRConfidence(DocumentVisualizer.java:301)
it.sampleProj.DocumentVisualizer.startRecognition(DocumentVisualizer.java:220)
it.sampleProj.DocumentIdentifier.recognizeDocument(DocumentIdentifier.java:147)
DocumentIdentifier.startDocumentSearch(DocumentIdentifier.java:89)
DocumentRecognizerServlet.doPost(DocumentRecognizerServlet.java:106)
javaservlet.http.HttpServlet.service(HttpServlet.java:643)
javaservlet.http.HttpServlet.service(HttpServlet.java:723)
我使用的是ApacheTomcat8 64位、JDK 7.0.60 64位和Tesseract.exe以及Windows 2008服务器R2 64位上64位的相关.dll文件。 这个错误听起来像是权限问题,我不确定Tomcat运行时使用的用户帐户是什么。无论如何,我已经向tomcat的lib文件夹中包含的两个.ddl文件(libtesseract302.dll和liblept168.dll)授予了所有权限

有一种方法可以从Javadoc获取有关拒绝访问问题所涉及的资源的更多信息。

Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
这是一个与JNI相关的错误。loadLibrary正在尝试加载本机库,但在java.library.path定义的路径上找不到它。启动JVM时,应将此路径定义为系统属性。e、 g

-Djava.library.path=<your native library>
-Djava.library.path=

最后,问题是由32-64位不匹配引起的

正如我所说,Tomcat、JVM、Tesseract和OS都是64位版本。但是战争是用32位构建设置生成的。
重新创建64位的.war为我解决了这个问题。

以系统管理员的身份运行它,它肯定会工作

libtesseract302.dll和liblept168.dll是否依赖其他dll?他们还需要权限调整。可能是的,但我如何才能发现是否存在其他依赖的dll?我通常使用。设置路径应该不会有什么区别,已找到库,并且在调用
打开
时引发了错误。