编译tensorflow lite最小示例

时间:2018-11-08 19:00:45

标签: android tensorflow tensorflow-lite

我正在尝试在android上使用tensorflow lite。 android studio编译期间出现错误:

undefined reference to 'tflite::InterpreterBuilder::operator()(std::__ndk1::unique_ptr<tflite::Interpreter, std::__ndk1::default_delete<tflite::Interpreter> >*)'

在尝试编译https://www.devtrends.co.uk/blog/wrapping-asp.net-web-api-responses-for-consistency-and-to-provide-additional-information时,我设法得到了一个可重现的示例。

获取错误的步骤

  1. 下载android ndk(我尝试过15c和16b都失败了)。致电build/tools/make_standalone_toolchain.py --arch arm --api 21 --stl=libc++ --install-dir android-toolchain

  2. 构建libtensorflow,这在我的构建文件中。

tensorflow/lite/BUILD

cc_binary(
    name = "libtensorflowlite.so",
    linkopts=[
        "-shared",
        "-Wl,-soname=libtensorflowlite.so",
    ],  
    linkshared = 1,
    copts = tflite_copts(),
    deps = [ 
        ":framework",
        "//tensorflow/lite/kernels:builtin_ops",
    ],  
)

我这样称呼它:

bazel build //tensorflow/lite:libtensorflowlite.so --crosstool_top=//external:android/crosstool --cpu=armeabi-v7a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cxxopt="-std=c++11"
  1. 我克隆了平面缓冲区存储库(依赖项)并进行编译。

  2. 然后我尝试编译minimal.cc

我这样称呼它:

android-toolchain/bin/clang++  -std=c++11 -Igit/tensorflow-android -Igit/flatbuffers/include -Lgit/tensorflow-android -Lgit/flatbuffers/build minimal.cc -ltensorflowlite -lflatbuffers

({libtensorflow.sogit/tensorflow-android中,libflatbuffers.agit/flatbuffers/build中)

这是怎么回事?我不知道为什么要调用此方法,我没有使用两个参数来调用对象。

1 个答案:

答案 0 :(得分:0)

错误是我不在ndk 18上。我没有切换到它,因为编译bazel时专门告诉我使用<= 16!