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

Java LoadLibrary未解析依赖项,但依赖dll位于同一目录中

能文华
2023-03-14

我在Java加载本机dll时遇到问题,就像64位Windows 7一样。FWIW包是ZeroMQ,但重要的是jar需要一个本地dll来加载,称为jzmq。dll。这又取决于libzmq。dll(和一些标准库)。我已经将这两个DLL复制到target/lib和setjava中。语言目标/库的路径。

如果我写:

System.loadLibrary("jzmq");

我得到了一个不满意的链接错误,它是“找不到依赖库”。但是如果我说

System.loadLibrary("libzmq");
System.loadLibrary("jzmq");

那么就没有问题了,jzmq。dll加载成功。

在附带的jar中,它只有系统。loadLibrary(“jzmq”),我不想在代码中处理依赖关系。我不清楚为什么依赖项不能自动加载,或者我需要做什么才能让它正常工作。

提前感谢您的帮助!


共有1个答案

郎成龙
2023-03-14

库的依赖关系由操作系统而不是Java运行时来解决。当您设置java时。图书馆Java运行时知道在哪里查找库,但操作系统仍然找不到依赖项。要让Windows找到您的库,您必须在环境变量中设置目录。

PS:当您首先加载依赖库时它起作用的原因是,它将在之后的进程地址空间中,Windows会在那里找到它,并且不需要在文件系统中找到它

PPS:有文章说,如果你将依赖库放在同一个目录中,它们将自动在Windows上找到,这只说明了一半的事实。之所以这样做,是因为a)他们谈论的是可执行文件的依赖关系,而不是其他库的依赖关系;b)当您启动一个没有显式工作目录的可执行文件时,工作目录将是其中包含可执行文件的目录,Windows会自动将工作目录添加到搜索路径中(因此会找到位于同一目录中的库)。

 类似资料:
  • 当我试图导入依赖项时,我收到以下错误: 请帮帮我,我哪里错了? 事先谢谢你

  • 我想使用hbase hortonworks连接器。github指南 但是我不知道如何在我的项目中导入它。我有以下build.sbt: 它给出了以下未解决的依赖关系: 错误:导入SBT项目时出错: [警告]==本地:尝试[警告]常春藤。xml[警告]==公共:已尝试[警告] https://repo1.maven.org/maven2/com/hortonworks/shc/1.1.2-2.1-s_

  • 我给ivy添加了一个依赖项(我们称之为a)。在maven central中具有pom文件的xml。Ivy使用ibiblio来解析maven依赖项。添加到常春藤中的依赖项(A)。xml具有可传递依赖项(B)。到目前为止,一切都很好。传递依赖(B)的依赖(C)不能用常春藤来解决。 我在常春藤上定义了一个新的名字。如下所示的xml: 在B的pom文件中,C在编译和测试范围中定义如下: 当我在ivy的缓存

  • 我正在使用IntelliJ开发Spark应用程序。我正在遵循这个关于如何使intellij与SBT项目良好地工作的指导。 但这样我就无法在IntelliJ内部运行应用程序,因为类路径中不会包含spark依赖项。

  • 使用IntelliJ最新的scala插件sbt 13.8和scala 2.11.7的新sbt项目,我尝试添加一个库-akka 2.4.2。在此之后,我简单地添加 [信息]解析org.scala-sbt#testing;0.13.8... [信息]解析org.scala-sbt#test-agent;0.13.8... [信息]解析org.scala-SBT#test-interface;1.0..