java - 无法将 jzmq.dll 加载到 java 中

标签 java dll java-native-interface

我想用java运行zmq。 我曾尝试像question那样做

我编译了项目https://github.com/zeromq/libzmq然后https://github.com/zeromq/jzmq

毕竟使用参数运行我的程序-Djava.library.path=C:\zmq\jzmq\jzmq-jni\builds\msvc\x64\Release\;C:\zmq\libzmq\bin\x64\发布\v141\动态

import org.zeromq.ZMQ;

public class TestZMQ {

    public static void main(String[] args) throws Exception {
        ZMQ.Context context = ZMQ.context(1);
    }
}

结果我有异常(exception)

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\zmq\jzmq\jzmq-jni\builds\msvc\x64\Release\jzmq.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at org.zeromq.ZMQ.<clinit>(ZMQ.java:40)
    at TestZMQ.main(TestZMQ.java:8)

Dependency walker显示多个错误。人们说它的出现是因为沃克自己,而不是图书馆。 enter image description here

感谢您的帮助。

最佳答案

java.library.path 有问题在 window 中。通常需要系统变量 Path并将其放入 java.library.path 。 当我设置 -Djava.library.path=myLybraryPath ,就变成了myLybraryPath ,但你需要这样的东西 ${java.library.path};myLybraryPath否则你的应用程序无法找到 Windows 库。

我通过在Path's中添加我的库找到了这个问题的解决方案系统变量。 There is another similar solution

set PATH=%PATH%;myLybraryPath

PS:在linux下没有同样的问题。这只是Windows的jvm 实现问题。

关于java - 无法将 jzmq.dll 加载到 java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250305/

相关文章:

java - 构建 spring org.springframework.cglib.proxy 源码找不到

java - 设计电话目录,为您提供从池中返回的号码

visual-studio - 在Bin中包括GAC程序集

c++ - 友元函数未解析的外部符号

java - 将字符串从 JNI (C++) 代码返回到 Java

Java Native Interface 偷偷摸摸的 fork 行为

java - 通过在 .NET 中设置 sendStringParametersAsUnicode =false 来提高 SQL 性能

java - ImageIO 无法写入 JPEG 文件

gcc - 如何链接到 gcc 中的 libatomic 库

android - 在 JNI 中使用错误代码将 jbytearray 转换为 char*