Home > OS >  C Tensorflow lite, undefined reference on some functions
C Tensorflow lite, undefined reference on some functions

Time:02-01

I'm trying to build and run a project using tensorflow lite on my debian 11 intel x86_64 architecture. So far I've followed the official documentation and the official github example.

Here are the steps I've followed:

  1. On ~/Desktop/ I ran git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
  2. mkdir tflite_build & cd ~/Desktop/tflite_build
  3. cmake ../tensorflow_src/tensorflow/lite
  4. cmake --build . I've removed the -J flag regardless of what the docs says because it causes my pc to freeze.
  5. mkdir ~/Desktop/tf_test & cd ~/Desktop/tf_test
  6. Create a CMakeLists.txt and a main.cpp file inside tf_testdirectory.
  7. Put the main code from the minimal example on the github repo provided above then this code in CMake:
cmake_minimum_required(VERSION 3.16)
project(minimal C CXX)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTFLITE_DISABLE_TELEMETRY=1")

set(TENSORFLOW_SOURCE_DIR "" CACHE PATH
  "Directory that contains the TensorFlow project" )
if(NOT TENSORFLOW_SOURCE_DIR)
  get_filename_component(TENSORFLOW_SOURCE_DIR
    "/home/user/Desktop/tensorflow_src" ABSOLUTE)
endif()

add_subdirectory(
  "${TENSORFLOW_SOURCE_DIR}/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL)

add_executable(minimal minimal.cc)
target_link_libraries(minimal tensorflow-lite)
  1. Created the folder tf_Test/build and ran cmake .. inside it.
  2. After cmake is completed I run make inside the build directory and I'm getting the following error:
...
[100%] Linking CXX executable minimal
/usr/bin/ld: tensorflow-lite/libtensorflow-lite.a(interpreter.cc.o): in function `tflite::impl::Interpreter::ReportTelemetrySettings(char const*)':
interpreter.cc:(.text 0x292f): undefined reference to `tflite::telemetry::TelemetryReportSettings(TfLiteContext*, char const*, TfLiteTelemetryInterpreterSettings const*)'
/usr/bin/ld: tensorflow-lite/libtensorflow-lite.a(subgraph.cc.o): in function `tflite::Subgraph::Invoke()':
subgraph.cc:(.text 0x41c0): undefined reference to `tflite::telemetry::TelemetryReportEvent(TfLiteContext*, char const*, TfLiteStatus)'
/usr/bin/ld: tensorflow-lite/libtensorflow-lite.a(subgraph.cc.o): in function `tflite::Subgraph::ModifyGraphWithDelegate(TfLiteDelegate*)':
subgraph.cc:(.text 0x6ad0): undefined reference to `tflite::telemetry::TelemetryReportEvent(TfLiteContext*, char const*, TfLiteStatus)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/minimal.dir/build.make:184: minimal] Error 1
make[1]: *** [CMakeFiles/Makefile2:1408: CMakeFiles/minimal.dir/all] Error 2
make: *** [Makefile:149: all] Error 2

Notice that it's not saying this for all the functions. For example this works std::unique_ptr<tflite::FlatBufferModel> model = tflite::FlatBufferModel::BuildFromFile(filename); without errors.

These tree are causing trouble: tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptr<tflite::Interpreter> interpreter; tflite::InterpreterBuilder(*model, resolver)(&interpreter);

Note: I've trimmed some code compare to the github example for the sake of testing it, so only the above 4 lines are present on my main.

Why am I getting this error? I've tried compiling with bazel aswell but I'm getting the same error. What am I missing?

CodePudding user response:

Probably it is missing from the CMakeLists file

Update CMakeLists.txt and add tensorflow/lite/profiling/telemetry/telemetry.cc and tensorflow/lite/profiling/telemetry/telemetry.h to TFLITE_PROFILER_SRCS

It is also worth creating issue on Tensorflow repo for the team

  • Related