'Can't obtain static method fromNative(Method, Object) from class com.sun.jna.Native
I'm using the JNA's com.sun.jna.NativeLibrary
class in order to load the VLCJ
native library. I'm working on an armv8(aarch x64)-based linux device
. Below is my code, note that i am using the latest JNA version jna-4.5.2
:
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), Constants.DEPLIB_OUTPUT_DIRECTORY);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
LibXUtil.initialise();
First i was getting this error:
java.lang.UnsatisfiedLinkError: JNA native support (com/sun/jna/linux-aarch64/libjnidispatch.so) not found in resource path
After a quick search i found that i must copy the jna native lib directory from inside the jar into the jvm lib path, where the jna jar library has pre-built libraries for almost all known systems as shown in the image below:
jna-4.5.2 internal content.jpeg
After doing that, the above exception disappeared but another one came up:
java.lang.UnsatisfiedLinkError: Can't obtain static method fromNative(Method, Object) from class com.sun.jna.Native
the exception is saying that it couldn't find the method fromNative(Method, Object) in the class com.sun.jna.Native however after decompiling this class i found that the method already exists.
I'm out of ideas know, any help would be highly appreiated, thanks!.
Solution 1:[1]
solve by:
- undo this step:
After a quick search i found that i must copy the
jna
native lib directory from inside the jar into thejvm
lib path...
- remove all
jna
modules (jars) from my project - download and link the following jars into my project:
jna.jar
jna-platform.jar
linux-aarch64.jar
Solution 2:[2]
If the jar files: jna-5.11.0.jar and jna-platform-5.11.0.jar (or whatever version number you are using) if in you lib path (build path in Eclipse), the java command option:
-Djna.nosys=true
may solve the problem. When first started, JNA is loads its own native access library and it wasn't finding it. jna.nosys=true allows JNA to look in the jna-X.XX.X.jar file for what it needs. The error message confused my because JNA seemed to be found and loaded, but it was complaining about not finding 'fromNative'.
Loading JNA JNA includes a small, platform-specific shared library which enables all native access. When the Native class is first accessed, JNA will first attempt to load this library from the directories specified in jna.boot.library.path. If that fails and jna.nosys=false is set, it will fall back to loading from the system library paths. Finally it will attempt to extract the stub library from from the JNA jar file, and load it. The jna.boot.library.path property is mainly to support jna.jar being included in -Xbootclasspath, where java.library.path and LD_LIBRARY_PATH are ignored. It is also useful for designating a version of the library to use in preference to any which may already be installed on the system. ...
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | peter bence |
Solution 2 | Ribo |