找不到源文件:/home/tensorflow/core/util/stats_calculator.cc

Cannot find source file: /home/tensorflow/core/util/stats_calculator.cc

我是 CMake 和 ROS 的新手。

我一直在学习为我的 turtlebot3 项目设置 tensorflow on ubuntu 20.0.4 (server) and rpi4, as well as building tensorflow lite with CMake 的教程。

我将以下代码添加到我的 CMakeLists.txt 并将我的 tensorflow 源目录从 "${TENSORFLOW_SOURCE_DIR}/tensorflow/lite" 修改为"${TENSORFLOW_SOURCE_DIR}/ubuntu/tensorflow/tensorflow/lite"

set(TENSORFLOW_SOURCE_DIR "" CACHE PATH
  "Directory that contains the TensorFlow project" )
if(NOT TENSORFLOW_SOURCE_DIR)
  get_filename_component(TENSORFLOW_SOURCE_DIR
    "${CMAKE_CURRENT_LIST_DIR}/../../../../" ABSOLUTE)
endif()

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

add_executable(MobileNetV1 src/scripts/MobileNetV1.cpp)
target_link_libraries(MobileNetV1  ${catkin_LIBRARIES} ${OpenCV_INCLUDE_DIRS} tensorflow-lite)

构建后我遇到以下错误。

CMake Error at /home/ubuntu/tensorflow/tensorflow/lite/CMakeLists.txt:449 (add_executable):
  Cannot find source file:

    /home/tensorflow/core/util/stats_calculator.cc

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
  .hpp .hxx .in .txx


CMake Error at /home/ubuntu/tensorflow/tensorflow/lite/CMakeLists.txt:449 (add_executable):
  No SOURCES given to target: benchmark_model

文件存在于 /home/ubuntu/tensorflow/tensorflow/core/util/stats_calculator.cc 下。不知道为什么检测不到

我不知道下一步该怎么做,请帮我解释一下为什么会出现这个错误。

我要编译的代码示例和运行来自这个github如果你想复制。

如果您有关于如何在 C++ 上设置 tensorflow-lite 的易于遵循的教程链接,那就太棒了!

如您的代码所述,目录 TENSORFLOW_SOURCE_DIR 包含 TensorFlow 项目。换句话说,这个目录的内容应该是这样的:https://github.com/tensorflow/tensorflow。 tensorflow-lite 的路径应该与教程中所写的完全一致:

${TENSORFLOW_SOURCE_DIR}/tensorflow/lite

如果表达式 "${CMAKE_CURRENT_LIST_DIR}/../../../../" 不表示您计算机上 TensorFlow 项目的根,则修改 表达式 但保留 TENSORFLOW_SOURCE_DIR 变量的含义。

您可以在计算后打印变量 TENSORFLOW_SOURCE_DIR 的值,并检查它是否实际引用您计算机上 Tensorflow 项目的根目录。


实际上,变量 TENSORFLOW_SOURCE_DIRTensorFlow 项目 本身中 使用。当您的 TENSORFLOW_SOURCE_DIR 设置与其在 Tensorflow 项目中的预期含义不符时,正是这种用法会导致问题。

我想知道为什么教程建议设置 TENSORFLOW_SOURCE_DIR 变量,但没有说明该变量在 TensorFlow 项目中的用法。

您的代码可以使用 Tensorflow 未使用的任何其他变量,而不是 TENSORFLOW_SOURCE_DIR 变量。您甚至可以在您的代码中硬编码 TensorFlow lite 的路径:

# Do not define and do not use `TENSORFLOW_SOURCE_DIR` variable at all
add_subdirectory(
  "/home/ubuntu/tensorflow/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL)

当发现变量TENSORFLOW_SOURCE_DIR没有设置时,脚本tensorflow/lite/CMakeLists.txt会自动正确设置它:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/CMakeLists.txt#L42