Я пытаюсь использовать библиотеку Tango3DR (которая написана на C) в моем коде Java.
Я хочу, чтобы жизненный цикл Android был написан на Java, и использую эту библиотеку только для вычисления объекта через jni.
У меня есть умеренные знания в синтаксисе и использовании jni, так что это не проблема. Что я не могу сделать, это импортировать libtango_3d_reconstruction.so
файл, из которого я скачал Вот.
Я думаю, среда хорошо настроена, потому что
static {
System.loadLibrary("tango_3d_reconstruction");
}
работает, и не дает ошибок или предупреждений.
Но если я попытаюсь использовать эту библиотеку из кода C ++, она не сможет загрузить файл .so.
Я также попытался использовать этот .so в простом Hello World на c ++, используя g ++ в качестве компилятора, библиотека находится в правильной папке (/usr/lib
) и я думаю, что я использовал правильные флаги для g ++ (g++ main.cpp -o main -ltango_3d_reconstruction
).
Это не работает, и динамический компоновщик выдает мне это предупреждение и ошибки (очень похожие на те, что есть в Android Studio):
/usr/bin/ld: skipping incompatible //usr/lib/libtango_3d_reconstruction.so when searching for -ltango_3d_reconstruction
/usr/bin/ld: cannot find -ltango_3d_reconstruction
Я прочитал в сети, что это msgstr «пропускать несовместимый libfoo.so при поиске -lfoo» происходит, когда существует несоответствие между 32 и 64-битной системой. У меня есть 64-битная система, поэтому я попробовал с -m32
Флаг и я получил ту же ошибку.
Я также пытался с -m64
флаг, но (как очевидно) я получил то же самое снова.
Последняя попытка: я вернулся в свою Android Studio, я скачал 32-битную версию NDK для Windows и попробовал с этим; ничего, все еще пропускает.
libtango_3d_reconstruction.so
действительно 32б?Задача ещё не решена.
Других решений пока нет …