Думаю, проблема в том, что я не включаю общую библиотеку сразу, но я не уверен.
Я получаю ошибку
error: undefined reference to 'tflite::InterpreterBuilder::operator()(std::__ndk1::unique_ptr<tflite::Interpreter, std::__ndk1::default_delete<tflite::Interpreter> >*)
Какие точки в последней строке:
std::unique_ptr<tflite::FlatBufferModel> model = tflite::FlatBufferModel::BuildFromFile(casemodel_path.c_str());
tflite::ops::builtin::BuiltinOpResolver resolver;
tflite::InterpreterBuilder builder(*model.get(), resolver);
std::unique_ptr<tflite::Interpreter> interpreter;
builder(&interpreter);
Я взял это из здесь , так как документация кажется устаревшей.
Я скомпилировал тензор потока из источника, используя NDK16b. Я следовал за этим , чтобы скомпилировать его.
Соответствующая часть моего файла cmake выглядит так:
[...]
# Flatbuffer
set(FLATB_DIR <path-to>/git/flatbuffers)
include_directories(${FLATB_DIR}/include)
include_directories(${FLATB_DIR}/grpc)
file(GLOB flatb_src "${FLATB_DIR}/src/*.cpp")
add_library(flatbuffer ${flatb_src})
add_library(libtensorflowlite SHARED IMPORTED)
set_target_properties(libtensorflowlite PROPERTIES IMPORTED_LOCATION
<path-to>/app/src/main/jniLibs/armeabi-v7a/libtensorflowlite.so)
include_directories(<path-to>/git/tensorflow-android)
[...]
target_link_libraries(flatbuffer libtensorflowlite <tons-of-other-libraries>)
Как я уже упоминал, я думаю, проблема в том, что я неправильно включаю разделяемую библиотеку. Все, что я сделал, это создал папку (и) jniLibs/armeabi-v7a/
в src/main
, куда я положил libtensorflowlite.so
. Погуглить, кажется, это один из способов сделать это? Я пробовал другие способы (с sourceSets
и implementation fileTree
, но ничего не получалось).
У меня есть некоторые другие предварительно скомпилированные библиотеки, которые я использую просто отлично, но они статичны (в target_link_libraries
я указываю прямо на их путь). Это проблема смешивания статических / разделяемых библиотек?
edit: после this я также пытался использовать ndk15c и редактировать ANDROID_NDK_API_LEVEL
, но это не помогло.