线程中出现异常"main&lang.UnssufiedLinkError:在Eclipse中的java.Library.Path中没有jzmq

2022-06-16 00:00:00 zeromq eclipse publish-subscribe jzmq

导入org.zeromq.ZMQ;

-对于上面的导入语句,我使用的是jzmq主文件夹中的"org文件夹",该文件夹由ZMQ.Java文件组成。

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

线程"main"java.lang.UnssufiedLinkError中出现异常:在java.Library.Path中没有jzmq 在java.lang.ClassLoader.loadLibrary(未知源) 在java.lang.Rounme.loadLibrary0(未知源) 在java.lang.System.loadLibrary(未知源) 在org.zeromq.ZMQ。(ZMQ.Java:41) 在server.main(Server.Java:13)

我应该做些什么? 对于Java中的ZeroMQ HelloWorld示例,我必须下载哪些包,必须使用哪些导入语句?

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


解决方案

此库(Jzmq)绑定到本机库libzmq。 如果您不使用libzmq的功能(例如IPC),您最好使用完整的Java实现-Jeromq(mvnrepo,jeromq git)。它具有几乎相同的功能。

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

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

  1. 获取zeromq、jzmq和libNa-1.0.10源。
  2. 将zeromq目录的全部内容复制到C:zmq
  3. 创建目录C:zmqjava
  4. 将jzmq目录的全部内容复制到C:zmqjava
  5. 创建目录C:zmqlibsodiumC:zmqlibsodium
  6. 复制到C:zmqlibsodiuminlibsodium-1.0.10-msvcWin32libsodium-1.0.10-msvcx64目录。
  7. 创建目录C:zmqlibsodiumsrc
  8. 复制到C:zmqlibsodiumsrc directory LibNa-1.0.10-msvc包括。

零位

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

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

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

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

配置文件C:zmquildsmsvcvs2013libsodium.import.props部分中的路径正确。

然后构建它,如果一切正常,您将在C:zmqinx64Releasev120dynamic目录中获得dll。如果不是,请签出日志,进行更改并重建它。


jzmq.

现在从目录C:zmqjavauildsmsvc

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

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

打开项目属性页面,转到配置属性-VC++目录并检查安装JDK的路径是否正确。 您将在那里看到类似以下内容:

........include;C:Program FilesJavajdk1.7.0_71include;C:Program
FilesJavajdk1.7.0_71includewin32;$(IncludePath)
还应检查库目录(忘记其名称)路径是否包含指向构建了zeromq库的目录的路径。 它将如下所示:

........inx64Releasev120dynamic;$(LibraryPath)
在属性页上,转到配置属性-程序集事件-程序集前事件,并选中属性"命令提示符"(首先在复制命令中检查文件的路径)。 它将如下所示:

copy ..config.hpp "......srcmainc++"

然后构建jzmq,如果一切正常,您将在C:zmqjavalib中获得文件。

如果不是,请签出日志,进行更改并重建它。


C:zmq中,您只需要binjavalib目录,其余目录可以删除。

将路径添加到binx64Releasev120dynamic并使用-Djava.library.path="path_to_javalib"运行您的Java应用程序

相关文章