JNI, связывающий статическую библиотеку: неверный заголовок ELF - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь использовать статическую библиотеку, используя 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.Где здесь проблема?

1 Ответ

0 голосов
/ 29 октября 2018

Эта документация не предполагает, что статическая библиотека может быть загружена loadLibrary, только динамическая (она же общая библиотека), которая сама статически связана с ВМ, что вполне может быть.Динамическая загрузка статической библиотеки невозможна.Смотрите статические библиотеки

...