当前位置: 首页 > 知识库问答 >
问题:

如何调试loadLibrary以了解为什么不加载DLL?

程旭尧
2023-03-14
    String ehrViewerExternalNativeLibs = "webapps" + pathSeparator +
                                         "ehr-viewer" + pathSeparator +
                                         "WEB-INF" + pathSeparator +
                                         "classes" + pathSeparator +
                                         "extlib";

    try {
        String catalinaHome = System.getProperty("catalina.home");
        String defaultLibraryPath = System.getProperty("java.library.path");
        String sharedLibraryPath = catalinaHome + pathSeparator + ehrViewerExternalNativeLibs;

        if (catalinaHome != null) {
            System.setProperty("java.library.path", defaultLibraryPath + ";" + sharedLibraryPath);
            String curPath = System.getProperty("java.library.path");
            logger.info(curPath);
            System.loadLibrary("awj2k");
            //System.load(sharedLibraryPath + "\\awj2k.dll");
            Class.forName("com.aware.j2k.codec.engine.AwJ2k");
        }

我不断得到这样的错误:

StandardWrapperValve调用严重:servlet ehrViewerServiceImpl的分配异常

java.lang.UnsatisfiedLinkError:java.library.path(java.lang.ClassLoader.LoadLibrary(未知源)(java.lang.Runtime.LoadLibrary0(未知源)(java.lang.System.LoadLibrary(未知源))(com.softmedical.ehrviewer.server.ehrviewerServiceImpl)(ehrviewerServiceImpl:121)

存储库路径的输出为:

INFO 2015-03-10 11:17:27,558-D:\tomcat-7.0\bin;C:\Windows\Sun\Java\bin;C:\Windows\System32;C:\Windows;C:\Windows\System32;C:\Windows;C:\Windows\System32\WBEM;C:\Windows\System32\WindowsPowerShell\v1.0\;.;.;D:\tomcat-7.0\webapps\ehr-viewer\web-inf\classes\extlib

文件夹extlib的内容是

awj2k.dll

如果我将DLL放在D:\tomcat-7.0\bin中,它就可以正常工作。窗帘后面有什么黑暗的咒语?为什么我可以从我想要的地方加载DLL?我看到java.library.path设置正确,为什么它不能工作呢?

共有1个答案

岳卓君
2023-03-14

类加载器可能没有使用您对java.library.path的运行时更改。请参见在Java运行时为本机库添加新路径。

可以在servlet的init中使用system.load加载库吗?像这样的东西。

public void init(ServletConfig config) {
  ServletContext ctx = config.getServletContext();
  String libPath = ctx.getRealPath("/") + "\WEB-INF\classes\extlib\awj2k.dll";
  System.load(libPath);
}

编辑:我刚刚意识到你要求一个调试方法。尝试在Tomcat启动配置或命令行中定义java.library.path以包含带有awj2k.dll的dir。如果System.LoadLibrary工作,这将确认运行时的库路径更改无效。

 类似资料:
  • 问题内容: 有人可以给出一个清晰的定义,以及一个简单的示例,为不了解JavaScript和node.js的人解释什么是“回调地狱”吗? 什么时候(以哪种设置)发生“回调地狱问题”? 为什么会发生? “回调地狱”是否总是与异步计算相关? 还是在单线程应用程序中也可能发生“回调地狱”? 我在Coursera参加了“反应式课程”,Erik Meijer在他的一次演讲中说RX解决了“回调地狱”的问题。我在

  • 我正在使用vscode,eslint正在运行,但它在同一项目中的其他文件中找不到某些文件中的错误。 有什么方法可以调试这个吗?像一个更详细输出的选项,它会告诉我在vscode中运行时每个文件的配置在哪里?

  • 问题内容: 我在其他地方找不到这个问题的明确答案,因此我将在这里尝试: 是否有某种方法(以编程方式或其他方式)来获取Application Classloader加载时所加载的JAR /类列表的确切顺序?应用程序类加载器,我是指在应用程序服务器(WLS,WAS,JBoss …)中加载EAR应用程序的类加载器,但显然,它适用于任何类加载器。 因此,概括地说,我想找出的是由指定类加载器加载的JAR的列

  • 我创建了一个简单的GUI,其中包括一个JTable。这张桌子可能被保存了 此时,保存函数按预期工作,当在保存目录中查找时,我可以看到表对象存储在文件中。 但是,当我尝试从文件加载表时,GUI从不显示加载的表。调用actionlistener函数,因为我有一个系统。输出“数据已加载”,但表格从不显示更新的数据。 我已尝试调用repaint(),但无效。如果有人能让我知道我可能做错了什么,我将不胜感激

  • 问题内容: 我正在使用(间接使用的a ,它确实发生了),但是显然代码是随机抛出的。是什么原因引起的,如何解决此问题?通过使用一些同步,也许吗? 这是完整的堆栈跟踪: 问题答案: 这不是同步问题。如果要迭代的基础集合被Iterator本身以外的任何东西修改,则会发生这种情况。 第二次调用时,将抛出。 正确的方法是 假设此迭代器支持操作。

  • 问题内容: 我正在关注有关管道库插件的教程。我制作了一个包含以下文件的存储库: helloWorld.groovy包含: Test.groovy包含: 我安装了所有管道插件,尤其是工作流-cps-global-lib- plugin。然后,我创建了一个新的管道作业,在其中加载了此存储库并将脚本路径设置为Test.groovy。当我运行此作业时,出现以下错误: 为什么helloWorld步骤未定义?