首页 > 解决方案 > 如何在 2019 年从 Java 链接到“unix-java”

问题描述

我正在使用此处的 NetworkManager/DBus 代码。它构建成功,但在运行时会产生:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no unix-java in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
    at java.base/java.lang.System.loadLibrary(System.java:1870)
    at cx.ath.matthew.unix.UnixSocket.<clinit>(UnixSocket.java:40)
    at org.freedesktop.dbus.Transport.connect(Transport.java:772)
    at org.freedesktop.dbus.Transport.<init>(Transport.java:737)
    at org.freedesktop.dbus.DBusConnection.<init>(DBusConnection.java:299)
    at org.freedesktop.dbus.DBusConnection.getConnection(DBusConnection.java:282)

这是一个 Maven 项目。我可以通过引入另一个工件或声明来解决这个问题吗?我整天都在转圈看那些 10 多年前的东西,试图弄清楚我是否使用过时的代码,因为以前我一直在使用我自己的通过内省生成的类,但现在显然我需要这个额外的库.

或者这个 unix-java 库是我必须通过我的发行版的包管理器获取的答案?无论是它emergeapt-get还是任何一个。

标签: javadbusnetworkmanager

解决方案


发现这个可能不相关的 DBus 服务页面,但提到了您尝试使用的同一个本机库:

对于 dbus 支持,您需要在系统上安装 jni/unix-java.so(Debian:libunixsocket-java ArchLinux:libmatthew-unix-java (AUR))。

它提到unix-java.so本机库,与您尝试加载的库相同,因此如果您使用的是 Debian/Ubuntu,请尝试执行以下操作:

apt install libunixsocket-java

推荐阅读