首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用模块info.java时无法加载FFI提供程序

使用模块info.java时无法加载FFI提供程序
EN

Stack Overflow用户
提问于 2020-09-17 08:39:04
回答 1查看 2.9K关注 0票数 2

我的Linux应用程序使用蓝牙设备。我使用这个库是为了与bluez堆栈:https://github.com/hypfvieh/bluez-dbus通信。

在我将module-info.java添加到我的客户端代码之前,它运行得非常好。突然,我发现了一个错误:

线程"main“中的jnr.ffi@2.1.15/jnr.ffi.provider.InvalidRuntime.newLoadError(InvalidRuntime.java:101)异常:无法在jnr.ffi@2.1.15/jnr.ffi.provider.InvalidRuntime.findType(InvalidRuntime.java:42)的jnr.ffi@2.1.15/jnr处加载FFI提供程序jnr.ffi.provider.jffi.Provider。jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.(SockAddrUnix.java:209) at jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174) at jnr.unixsocket@0.33/jnr.unixsocket.UnixSocketAddress.(UnixSocketAddress.java:53) at dbus.java@3.2.3/org.freedesktop.dbus.connections.transports.UnixSocketTransport.(UnixSocketTransport.java:32) dbus.java@3.2.3/org.freedesktop.dbus.connections.transports.TransportFactory.createTransport(TransportFactory.java:37) at dbus.java@3.2.3/org.freedesktop.dbus.connections.AbstractConnection.(AbstractConnection.java:161) at dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.(DBusConnection.java:334) at dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:149) at dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:169) at dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:219) at dbus.java@3.2.3/org.freedesktop.dbus.connections.impl.DBusConnection.getConnection(DBusConnection.java:184) at bluez.dbus@0.1.3/com.github.hypfvieh.bluetooth.DeviceManager.createInstance(DeviceManager.java:74) at .由于: java.lang.UnsatisfiedLinkError:无法获得POINTER类型的本机定义,原始错误消息如下: java.lang.UnsatisfiedLinkError:无法在jar文件中找到存根库。试用了jni/x86_64-Linux/libjffi-1.2.so/jni/x86_64-Linux/libjffi-1.2在jffi@1.2.23/com.kenai.jffi.internal.StubLoader.getStubLibraryStream(StubLoader.java:450) at jffi@1.2.23/com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:375) at jffi@1.2.23/com.kenai.jffi.internal.StubLoader.load(StubLoader.java:278) at jffi@1.2.23/com.kenai.jffi.internal.StubLoader.(StubLoader.java:487)在java.base/java.lang.Class.forName0(原生方法)、java.base/java.lang.Class.forName(Class.java:427)、jffi@1.2.23/com.kenai.jffi.Init.load(Init.java:68)、jffi@1.2.23/com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)、jffi@1.2.23/com.kenai.jffi.Foreign$InstanceHolder.(Foreign.java:45)、jffi@1.2。23/com.kenai.jffi.Foreign.getInstance(Foreign.java:103) at jffi@1.2.23/com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242) at jffi@1.2.23/com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237) at jffi@1.2.23/com.kenai.jffi.Type.resolveSize(Type.java:155) at jffi@1.2.23/com.kenai.jffi.Type.size(Type.java:138) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:178) at jnr.ffi@2.1.15/jnr.ffi.provider.AbstractRuntime.(AbstractRuntime.java:48) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.NativeRuntime.(NativeRuntime.java:57) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.NativeRuntime.(NativeRuntime.java:41) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.(NativeRuntime.java:53) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:49) at jnr.ffi@2.1.15/jnr.ffi.provider.jffi.Provider.(Provider.java:29) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)在java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk。internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:124) at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:346) at java.base/java.lang.Class.newInstance(Class.java:604) at jnr.ffi@2.1.15/jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)在jnr.ffi@2.1.15/jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.(FFIProvider.java:57) at jnr.ffi@2.1.15/jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35) at jnr.ffi@2.1.15/jnr.ffi.Runtime$SingletonHolder.(Runtime.java:82) at jnr.ffi@2.1.15/jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67) at jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix.jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix$DefaultSockAddrUnix.(SockAddrUnix.java:208) at jnr.unixsocket@0.33/jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174) at jnr.unixsocket@0.33/jnr.unixsocket.UnixSocketAddress.(UnixSocketAddress.java:53) at dbus.java@3.2.3/org.freedesktop.dbus.connections.transports.UnixSocketTransport.(UnixSocketTransport.java:32) at .

我试图在模块-info.java中要求与此错误相关的所有内容,但都没有成功:

代码语言:javascript
运行
复制
module org.example {
    requires dbus.java;
    requires dbus.java.nativefd;
    requires bluecove.linux.custom;
    requires bluez.dbus;
    requires jnr.ffi;
    requires jnr.x86asm;
    requires jnr.posix;
    requires jnr.enxio;
    requires jnr.unixsocket;
    requires jnr.constants;
    requires jnr.a64asm;
}

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 01:59:19

TL;博士

这对我有效,…

代码语言:javascript
运行
复制
java --patch-module jffi={{your.own.location}}/com/github/jnr/jffi/1.3.0/jffi-1.3.0-native.jar …

长版本

我下载了。这不是一个JPMS项目。但我将module-info.java文件添加到了四个子项目中的每个子项目中。

我将项目的com.github.jnr:jnr-ffi依赖项从2.0.9更新为2.1.5,以与在堆栈跟踪中看到的版本相匹配。我添加了下面的依赖项…

代码语言:javascript
运行
复制
…
<dependency>
    <groupId>com.github.hypfvieh</groupId>
    <artifactId>dbus-java</artifactId>
    <version>3.2.3</version>
</dependency>
<dependency>
    <groupId>com.github.hypfvieh</groupId> <artifactId>bluez-dbus</artifactId>
    <version>0.1.3</version>
</dependency>
<dependency>
    <groupId>com.rm5248</groupId>
    <artifactId>dbus-java-nativefd</artifactId>
    <version>1.0</version>
</dependency>
…

这样我就可以定义我的四个module-info.java描述符中的每一个,使其与您的…非常相似。

代码语言:javascript
运行
复制
module get.pid{
    exports getpid;
    requires dbus.java;
    requires dbus.java.nativefd;
    requires bluez.dbus;
    requires jnr.ffi;
    requires jffi;
    requires jnr.x86asm;
    requires jnr.posix;
    requires jnr.enxio;
    requires jnr.unixsocket;
    requires jnr.constants;
    requires jnr.a64asm;
}

在做--patch-module之前,我运行了一个示例项目,得到了与您所得到的完全相同的错误。

但是使用下面的命令,所有示例应用程序作为模块…都运行得非常好

代码语言:javascript
运行
复制
java --patch-module jffi={{your.own.location}}/com/github/jnr/jffi/1.3.0/jffi-1.3.0-native.jar --add-modules org.objectweb.asm --add-exports org.objectweb.asm/org.objectweb.asm=jnr.ffi --add-exports org.objectweb.asm/org.objectweb.asm.signature=jnr.ffi --module-path {{path.to.all.the.jars}} -m get.pid/getpid.Getpid

add-modulesadd-exports也至关重要。所以别忘了这些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63934326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档