无法从类com.sun.jna.Native的Native(Method,Object)获取静态方法

时间:2018-09-25 14:21:34

标签: java java-8 java-native-interface vlc jna

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

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), Constants.DEPLIB_OUTPUT_DIRECTORY);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
LibXUtil.initialise();

首先我遇到此错误:

java.lang.UnsatisfiedLinkError: JNA native support (com/sun/jna/linux-aarch64/libjnidispatch.so) not found in resource path

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

jna-4.5.2 internal content.jpeg

这样做之后,上述异常消失了,但又出现了另一个异常:

java.lang.UnsatisfiedLinkError: Can't obtain static method fromNative(Method, Object) from class com.sun.jna.Native

例外是说它在类 com.sun.jna.Native 中找不到方法 fromNative(Method,Object),但是在反编译此类后我发现该方法已经存在。

我没主意,谢谢,谢谢!。

1 个答案:

答案 0 :(得分:0)

解决方式:

  1. 撤消此步骤:
  

快速搜索后,我发现必须复制jna本机库   从jar内的目录进入jvm lib路径...

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