JNI 链接静态库:无效的 ELF header

JNI linking static library: Invalid ELF header

我正在尝试通过 JNI 使用静态库。因此我正在静态编译我的库 g++ -c -std=c++11 -o jnitest_jnitest_App.o jnitest_jnitest_App.cpp -lOtherLib

然后打包

ar rcs jnitest_jnitest_App.a jnitest_jnitest_App.o

现在,当我尝试 运行 我的 .jar 时,出现以下错误:

jnitest/jnitest_jnitest_App.a: invalid ELF header (Possible cause: endianness mismatch) at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method) at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2424) at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2481) at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2678) at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2611) at java.base/java.lang.Runtime.load0(Runtime.java:814) at java.base/java.lang.System.load(System.java:1838) at jnitest.jnitest.App.<clinit>(App.java:13)

我正在使用 64 位 Linux Mint 19 和 Java 10(64 位)

将本机代码编译到共享库中不会出现 JNI 错误。哪里出了问题?

That documentation does not suggest that a static library can be loaded by loadLibrary, only a dynamic (a.k.a shared library) that has itself been statically linked with the VM, which it might well be. Dynamically loading a static library is impossible. See static-libraries