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
我正在尝试通过 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