问题 如何用Java运行ZeroMQ?


我在使用Eclipse和Windows XP使用Java运行ZeroMQ时遇到了问题。我已成功安装[我认为] 0MQ库以及Java绑定。我以前的指示就是这样的 这里

建立了两个文件: zmq.jar 和 jzmq.dll。我将jar文件放在我的项目中,这允许代码编译好。我也设定了 的java.library.path 到dll的目录,将perf目录添加到我的项目,并将libzmq.dll添加到我的PATH。 (全部按照说明)。

我仍然得到以下我无法解决的异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\jzmq\lib\jzmq.dll: Can't find dependent libraries

jzmq.dll依赖于哪些其他库?我试过将libzmq.dll放在任何地方,但这没有帮助。 这个 是我正在努力工作的代码示例。

谢谢。


3420
2017-07-12 15:45


起源



答案:


把任何dll放在Windows根目录或Windows System32中都是难看的解决方案,它只是将你拉进Dll HELL。

您需要做的是在中添加ZQM二进制路径 系统路径

我在一小时内编译了64位ZMQ和JZMQ,这是我的文件夹结构:

C:\ ZMQ \ BIN
 --- jzmq.dll,libzmq.dll
C:\ ZMQ \ LIB
 --- ZMQ.jar

这是一步:

  1. 将binray路径添加到系统环境中,详细步骤是 控制面板 - 系统---高级设置,在弹出选项卡中,找到'advance' - '环境变量'---在'system vairiabls'中找到'PATH'并添加C:\ ZMQ \ bin中的值

  2. 打开dos提示符,然后输入'where jzmq.dll'(我不确定XP中是否存在where.exe)以确认它是否在PATH中。

  3. 启动Eclipse,打开项目,右键单击项目名称,然后在菜单“构建路径 - 添加外部存档”中选择C:\ ZMQ \ lib \ zMQ.jar。

全做完了!

在我的电脑中,示例运行正常。


8
2017-11-28 03:20



1)是否有理由要编译,而不是使用二进制? - user443854
没什么特别的,只是由于我的所有系统都是64位包含JDK,所以我想从头开始编译它。 - ray_linn
您使用什么方法编译64位ZMQ和JZMQ? - Ten_Ten_Steve
MinGW-W64,我是开发人员之一。 - ray_linn
使用VS2012会产生许多未解决的外部符号错误。我也会尝试MinGW - liang


答案:


把任何dll放在Windows根目录或Windows System32中都是难看的解决方案,它只是将你拉进Dll HELL。

您需要做的是在中添加ZQM二进制路径 系统路径

我在一小时内编译了64位ZMQ和JZMQ,这是我的文件夹结构:

C:\ ZMQ \ BIN
 --- jzmq.dll,libzmq.dll
C:\ ZMQ \ LIB
 --- ZMQ.jar

这是一步:

  1. 将binray路径添加到系统环境中,详细步骤是 控制面板 - 系统---高级设置,在弹出选项卡中,找到'advance' - '环境变量'---在'system vairiabls'中找到'PATH'并添加C:\ ZMQ \ bin中的值

  2. 打开dos提示符,然后输入'where jzmq.dll'(我不确定XP中是否存在where.exe)以确认它是否在PATH中。

  3. 启动Eclipse,打开项目,右键单击项目名称,然后在菜单“构建路径 - 添加外部存档”中选择C:\ ZMQ \ lib \ zMQ.jar。

全做完了!

在我的电脑中,示例运行正常。


8
2017-11-28 03:20



1)是否有理由要编译,而不是使用二进制? - user443854
没什么特别的,只是由于我的所有系统都是64位包含JDK,所以我想从头开始编译它。 - ray_linn
您使用什么方法编译64位ZMQ和JZMQ? - Ten_Ten_Steve
MinGW-W64,我是开发人员之一。 - ray_linn
使用VS2012会产生许多未解决的外部符号错误。我也会尝试MinGW - liang


您应该将libzmq.dll复制到java.library.path指向的位置并使用:

System.loadLibrary("libzmq")

原因是jzmq依赖于libzmq,因此必须首先加载libzmq。


3
2018-02-16 17:51



这比使用系统范围的路径更好。 - Jason S


我刚刚遇到过这个问题。我通过将jzmq.dll和libzmq.dll放入System32文件夹找到了解决方法。我不认为这是一个永久的解决方案,但它暂时起作用。


1
2017-07-13 04:02



谢谢你的回复。我只需要将libzmq.dll放在System32文件夹中,因为我在Eclipse中引用了jzmq.dll。它有效,但我仍然需要一个更永久的解决方案。 - Noah