首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从类fromNative获得静态方法com.sun.jna.Native (方法,对象)

无法从类fromNative获得静态方法com.sun.jna.Native (方法,对象)
EN

Stack Overflow用户
提问于 2018-09-25 14:21:34
回答 2查看 1.2K关注 0票数 0

我正在使用 JNA com.sun.jna.NativeLibrary类来加载VLCJ本机库。我正在开发一个armv8(aarch x64)-based linux device。下面是我的代码,注意,我正在使用最新的JNA版本 jna-4.5.2

代码语言:javascript
运行
复制
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), Constants.DEPLIB_OUTPUT_DIRECTORY);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
LibXUtil.initialise();

--我首先得到了一个错误:

代码语言:javascript
运行
复制
java.lang.UnsatisfiedLinkError: JNA native support (com/sun/jna/linux-aarch64/libjnidispatch.so) not found in resource path

快速搜索后,我发现必须将jna本机lib目录从jar内部复制到jvm库路径中,jna库为几乎所有已知系统都预先构建了库,如下图所示:

4.5.2内部content.jpeg

这样做后,上述例外情况消失了,但又出现了另一个例外:

代码语言:javascript
运行
复制
java.lang.UnsatisfiedLinkError: Can't obtain static method fromNative(Method, Object) from class com.sun.jna.Native

例外是它无法在类com.sun.jna.Native中找到方法fromNative(方法,对象),但是在对该类进行反编译之后,我发现该方法已经存在。

我没有想法知道,任何帮助都会得到极大的认可,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-25 16:09:39

通过下列方式解决:

  1. 撤消此步骤:

快速搜索后,我发现必须将jna本机库目录从jar内部复制到jvm库路径中.

  1. 从我的项目中删除所有jna模块(jars)
  2. 下载并链接以下jars到我的项目:jna.jar jna-platform.jar linux-aarch64.jar
票数 1
EN

Stack Overflow用户

发布于 2022-04-28 20:37:23

如果jar文件: jna-5.11.0.jar和jna 5.11.0.jar(或您正在使用的任何版本号),如果在lib路径中(Eclipse中的构建路径),则使用java命令选项:

-Djna.nosys=true

也许能解决这个问题。当第一次启动时,JNA加载了它自己的本地访问库,但没有找到它。jna.nosys=true允许JNA在jna-X.XX.X.jar文件中查找它需要的内容。错误信息混淆了我,因为JNA似乎被找到并加载,但它抱怨找不到“来自本地人”。

摘自联核机构的文件:

加载JNA包括一个小型的、特定于平台的共享库,它允许所有本机访问。当首次访问本机类时,JNA将首先尝试从jna.boot.library.path中指定的目录加载这个库。如果失败,并且设置了jna.nosys=false,它将返回到从系统库路径加载。最后,它将尝试从jar文件中提取存根库,并加载它。jna.boot.library.path属性主要用于支持-Xbootclasspath中包含的jna.jar,其中java.library.path和LD_LIBRARY_PATH被忽略。它还有助于指定库的版本,以便优先使用可能已安装在系统上的任何版本。..。

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

https://stackoverflow.com/questions/52500488

复制
相关文章

相似问题

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