无法将jzmq.dll加载到java

时间:2017-11-12 15:06:59

标签: 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\Release\v141\dynamic

运行我的程序
import org.zeromq.ZMQ;

public class TestZMQ {

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

结果我有异常

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Windows中存在java.library.path的问题。通常需要系统var 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中没有同样的问题。它只是窗户&#39; jvm 实现问题。