java.lang.UnsatisfiedLinkError:无法加载库“TSCLIB”:找不到指定的模块

Posted

技术标签:

【中文标题】java.lang.UnsatisfiedLinkError:无法加载库“TSCLIB”:找不到指定的模块【英文标题】:java.lang.UnsatisfiedLinkError: Unable to load library 'TSCLIB': The specified module could not be found 【发布时间】:2014-12-29 04:06:42 【问题描述】:

我正在尝试从 GWT Web 应用程序打印 TSC-244 Pro 条形码标签打印机。他们给了 tsclib.dll。这就是为什么我使用 jna.jar 并将 tsclib.dll 文件复制到 C:\Windows 和 [my_project_dir]\war\WEB-INF\lib 的原因。它的工作,但是当我部署到 apache tomcat 时。它不起作用,我收到以下错误。请给我解决方案。谢谢。

严重:调度传入 RPC 调用时出现异常 com.google.gwt.user.server.rpc.UnexpectedException:服务方法'public abstract boolean com.mbc.client.Controller.print(java.lang.String,java.util.ArrayList) throws java.lang.IllegalArgumentException' throws意外异常:java.lang.UnsatisfiedLinkError: Unable to load library 'TSCLIB': The specified module could not be found.

at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

原因:。

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:164)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:237)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:375)
at com.sun.jna.Native.loadLibrary(Native.java:360)
at com.mbc.server.impls.TscLibDll.<clinit>(TscLibDll.java:8)
at com.mbc.server.util.BarCode.openport(BarCode.java:73)
at com.mbc.server.util.Printer.openBarCodePrinter(Printer.java:67)
at com.mbc.server.util.Printer.printtsc(Printer.java:97)
at com.mbc.server.util.Printer.print(Printer.java:35)
at com.mbc.server.ControllerServlet.print(ControllerServlet.java:1390)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
... 17 more

【问题讨论】:

【参考方案1】:

我解决了这个问题。我找不到 TSCLIB.dll,因为我刚刚下载了 32 bit 的 dll 文件。我的 apache tomcat 程序位于64 bit。因此,为什么无法加载库“TSCLIB”。现在我刚刚下载了64 bit dll文件并复制到C:\Windows\sysWOW64\。这是工作!不错。

【讨论】:

【参考方案2】:

您需要将TscLib.DLL 添加到您的LD_LIBRARY_PATH 才能使com.mbc.server.impls.TscLibDll 中的本机代码工作。

【讨论】:

@ChesterDenn 没有代码,它是一个环境变量。 set "LD_LIBRARY_PATH=&lt;SOME_PATH&gt;" 其中&lt;SOME_PATH&gt; 包含TscLib.DLL 那你没有设置正确。请注意,这是我们正在谈论的本机库(不是 Java 类)。 您的意思是在系统变量中设置,不是吗?我设置了变量名:LD_LIBRARY_PATH 和变量值:%SystemRoot%\TSCLIB.dll。错了吗? 尝试“LD_LIBRARY_PATH=%SystemRoot%”假设“TSCLIB.dll”实际上在SystemRoot。如果它不起作用并且您仍然遇到上述异常,那么您还没有找到正确的“TSCLIB.dll”

以上是关于java.lang.UnsatisfiedLinkError:无法加载库“TSCLIB”:找不到指定的模块的主要内容,如果未能解决你的问题,请参考以下文章