gpt4 book ai didi

Java LoadLibrary 未解决依赖关系,但依赖的 dll 位于同一目录中

转载 作者:行者123 更新时间:2023-12-02 02:31:20 26 4
gpt4 key购买 nike

我在 Java 加载 native dll 时遇到问题,因为它发生在 64 位 Windows 7 上。FWIW 包是 ZeroMQ,但重要的是该 jar 需要加载 native dll,称为 jzmq.dll。这又取决于 libzmq.dll (和一些标准库)。我已将两个 dll 复制到 target/lib 并将 java.language.path 设置为 target/lib。

如果我写:

System.loadLibrary("jzmq");

我收到 UnsatisfiedLinkError找不到依赖库。但是如果我说

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

然后就没问题了,jzmq.dll加载成功。

在随附的 jar 中,它只有 System.loadLibrary("jzmq"),我不想在代码中摆弄依赖项。我不清楚为什么依赖项不会自动加载,也不清楚我需要做什么才能让它正常工作。

预先感谢您的帮助!

最佳答案

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

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

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

关于Java LoadLibrary 未解决依赖关系,但依赖的 dll 位于同一目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com