Linking static library with JNI

前端 未结 3 2070
情话喂你
情话喂你 2020-11-30 05:14

Java versions prior Java 8 requires native code to be in a shared library, but I\'ve read that with Java 8 it\'s possible to use static linked libraries with JNI. I have sea

3条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-30 05:42

    The Java 8 enhancement https://openjdk.java.net/jeps/178 is meant for the JVM.

    Given two files:

    • Main.java
    • Main.c

    Create libnative.so:

    javac Main.java
    javah Main
    gcc -c Main.c
    gcc -c Main.c -I /home/dx/.sdkman/candidates/java/current/include/linux -I /home/dx/.sdkman/candidates/java/current/include
    gcc -shared -o libnative.so Main.o
    

    Create libnative.a:

    ar -cvq libnative.a Main.o
    

    For each libnative.a, libnative.so test run via:

    java -Djava.library.path=.  Main
    

    Result:

    • Success execution when libnative.so
    • Fail execution when libnative.a

    This proves that 178 is for the JVM.

    References:

    • https://github.com/java-native-access/jna/issues/387
    • https://github.com/typelogic/jni
    • https://asciinema.org/a/HTPWvr0WLyEL6iz3ahGUG1A63

提交回复
热议问题