1

导入 org.zeromq.ZMQ;

- 对于上述导入语句,我在 jzmq 主文件夹中使用“org 文件夹”,该文件夹由 ZMQ.java 文件组成。

- 所以,编译没有问题。当我开始运行程序时,它显示以下异常

线程“main”中的异常 java.lang.UnsatisfiedLinkError:java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System 的 java.library.path 中没有 jzmq .loadLibrary(Unknown Source) at org.zeromq.ZMQ.(ZMQ.java:41) at server.main(Server.java:13)

我应该怎么做?java中的ZeroMQ helloworld示例必须下载哪些包以及必须使用哪些导入语句?

我看到很多人在某处使用 libzmq.dll、jzmq.dll 和一些 jar 文件来避免该异常。但我想要一个明确的答案。

4

2 回答 2

3

此库 (jzmq) 绑定到本机库 libzmq。如果您不使用 libzmq 的功能(例如 ipc),您最好使用完整的 java 实现 - jeromqmvnrepojeromq git)。它具有几乎相同的功能。

否则如果你需要jzmq,你必须正确编译它。这是我在 Windows x64 上编译它的方式:

要构建库,您需要 IDE Visual Studio 2010 或更高版本。在这个例子中,我使用了 2013 版本。所有工作都在目录中执行C:\zmq(例如)。

  1. 获取 zeromq、jzmq 和 libsodium-1.0.10 源。
  2. 将 zeromq 目录的全部内容复制到C:\zmq.
  3. 创建一个目录C:\zmq\java
  4. 将 jzmq 目录的全部内容复制到C:\zmq\java.
  5. 创建目录C:\zmq\libsodiumC:\zmq\libsodium
  6. 复制到C:\zmq\libsodium\binlibsodium-1.0.10-msvc\Win32libsodium-1.0.10-msvc\x64目录。
  7. 创建一个目录C:\zmq\libsodium\src
  8. 复制到C:\zmq\libsodium\src directory libsodium-1.0.10-msvc\include。

Zeromq。

在 Visual Studio 中从目录中打开相应的 zeromq 解决方案文件C:\zmq\builds\msvc

打开配置管理器。主动配置解决方案 - 选择 DynRelease。主动解决方案平台 - 选择 x64。

打开项目属性页面,进入配置属性 - C/C++ - 常规,检查包含文件目录的路径。

然后选择链接器 - 常规,并检查库目录的路径。

在配置文件C:\zmq\builds\msvc\vs2013\libsodium.import.props中正确的路径部分。

然后构建它,如果一切正确,您将在C:\zmq\bin\x64\Release\v120\dynamic目录中获得 dll。如果不是 - 检查日志,进行更改并重建它。


jzmq。

现在从目录中打开相应的 jzmq 解决方案文件C:\zmq\java\builds\msvc\

以及在 zeromq 项目中打开配置管理器并选择 Release 和 x64 平台。

打开项目属性页面,转到配置属性 - VC ++ 目录并检查安装 JDK 的路径是否正确。你会看到这样的东西:

..\..\..\..\include;C:\Program Files\Java\jdk1.7.0_71\include;C:\Program
Files\Java\jdk1.7.0_71\include\win32;$(IncludePath)

还要检查库目录(忘记它的名称)路径是否包括带有构建 zeromq 库的目录的路径。它看起来像这样:

..\..\..\..\bin\x64\Release\v120\dynamic;$(LibraryPath)

在属性页面上,转到配置属性-组装事件-组装前的事件并检查属性“命令提示符”(首先检查复制命令中文件的路径)。它看起来像这样:

copy ..\config.hpp "..\..\..\src\main\c++\"

然后构建 jzmq,如果一切正确,您将获得C:\zmq\java\lib.

如果不是 - 检查日志,进行更改并重建它。


C:\zmq您只需要 binjava\lib目录中,其余的可以删除。

将路径添加到 PATHbin\x64\Release\v120\dynamic并运行您的 java 应用程序-Djava.library.path="path_to_java\lib"

于 2016-12-21T20:12:11.997 回答
1

我在 Linux (eclipse) 上遇到了同样的问题,我通过为我的 zmq.jar 设置本机库 jzmq 的路径来解决它。通过进入项目属性(右键单击 project -> Properties... -> Java Build Path ),您可以将 JDIC.jar 添加为库选项卡上的库,展开它,然后编辑 Native Library Location 属性指向包含本机库的文件夹:在我的情况下,它是 /usr/local/lib。

因此,基本上,您可以将 -Djava.library.path 添加为启动配置中的 VM 参数,或按照 http://www.eclipsezone.com/eclipse/forums/t49342.html中指定的方式设置本机库

我希望它能帮助遇到这个问题的人。

祝你有美好的一天。

于 2018-08-10T14:42:16.357 回答