我正在使用 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
快速搜索后,我发现必须将jna本机lib目录从jar内部复制到jvm库路径中,jna库为几乎所有已知系统都预先构建了库,如下图所示:
这样做后,上述例外情况消失了,但又出现了另一个例外:
java.lang.UnsatisfiedLinkError: Can't obtain static method fromNative(Method, Object) from class com.sun.jna.Native
例外是它无法在类com.sun.jna.Native中找到方法fromNative(方法,对象),但是在对该类进行反编译之后,我发现该方法已经存在。
我没有想法知道,任何帮助都会得到极大的认可,谢谢!
发布于 2018-09-25 16:09:39
通过下列方式解决:
快速搜索后,我发现必须将
jna
本机库目录从jar内部复制到jvm
库路径中.
jna
模块(jars)jna.jar
jna-platform.jar
linux-aarch64.jar
发布于 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被忽略。它还有助于指定库的版本,以便优先使用可能已安装在系统上的任何版本。..。
https://stackoverflow.com/questions/52500488
复制相似问题