我正在尝试在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时,我设法得到了一个可重现的示例。
获取错误的步骤
下载android ndk(我尝试过15c和16b都失败了)。致电build/tools/make_standalone_toolchain.py --arch arm --api 21 --stl=libc++ --install-dir android-toolchain
构建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"
我克隆了平面缓冲区存储库(依赖项)并进行编译。
然后我尝试编译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.so
在git/tensorflow-android
中,libflatbuffers.a
在git/flatbuffers/build
中)
这是怎么回事?我不知道为什么要调用此方法,我没有使用两个参数来调用对象。
答案 0 :(得分:0)
错误是我不在ndk 18上。我没有切换到它,因为编译bazel时专门告诉我使用<= 16!