相关文章推荐
高大的板栗  ·  rapidjson解析json数据 - ...·  1 年前    · 
正直的钥匙扣  ·  Java 读写csv_java ...·  2 年前    · 
任性的香瓜  ·  vue 3.0 + vite + ...·  2 年前    · 
温暖的香烟  ·  灯箱怎么接电线_抖抖音·  2 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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!.

  • 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
  • ?? Why or how does this fix it? I'm trying to get JNA to work in Eclipse, I have the jna-5.11.0.jar and jna-platform-5.11.0.jar in my libs dir and in my build path. Why does it matter where they are if the JVM can find them? – Ribo Apr 28, 2022 at 19:42

    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'.

    From JNA documentation:

    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.
            

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.