无法在Android上编译tensorflowlite C ++ API

时间:2018-11-08 14:25:46

标签: android tensorflow cmake

我认为问题是我没有立即包括共享库,但是我不确定。

我得到的错误是

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);

我从here那里拿走了,因为documentation似乎已经过时了。

我使用NDK16b从源代码编译了tensorflow。我遵循this进行编译。

我的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。谷歌搜索似乎是做到这一点的一种方法?我尝试了其他方法(使用sourceSetsimplementation fileTree,但没有任何效果)。

我还使用了其他一些预编译的库,但是它们是静态的(在target_link_libraries中,我直接指向它们的路径)。这样混合静态/共享库是否有问题?

编辑:在this之后,我还尝试使用ndk15c并编辑ANDROID_NDK_API_LEVEL,但这无济于事。

0 个答案:

没有答案