线程“main”中的异常java.lang.UnsatisfiedLinkError:Eclipse中java.library.path中没有jzmq

时间:2016-11-05 08:39:46

标签: eclipse zeromq publish-subscribe jzmq

导入org.zeromq.ZMQ;

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

此lib(jzmq)绑定到本机库libzmq。 如果你不使用libzmq(例如ipc)的功能,你最好使用完整的java实现 - jeromq mvnrepojeromq 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\bi n libsodium-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 \包括。
  9. <强> Zeromq。

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

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

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

    然后选择linker - General,并检查库目录的路径。

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

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

    <强> Jzmq。

    现在从目录C:\zmq\java\builds\msvc\

    打开相应的jzmq解决方案文件

    与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)
    

    还要检查Library Catalogs(忘记其名称)路径是否包含具有内置zeromq libs的目录的路径。 它看起来像这样:

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

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

    copy ..\config.hpp &quot;..\..\..\src\main\c++\&quot;
    

    然后buid jzmq,如果一切正确,你将获得C:\zmq\java\lib中的文件。

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

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

    将路径添加到PATH bin\x64\Release\v120\dynamic并使用-Djava.library.path="path_to_java\lib"运行java app

答案 1 :(得分:1)

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

因此,基本上,您可以在启动配置中将-Djava.library.path添加为VM参数,或者按照在 http://www.eclipsezone.com/eclipse/forums/t49342.html

我希望它能对遇到此问题的人们有所帮助。

祝你有美好的一天。