Ubuntu系统全局配置TensorFlow Lite解决C++头文件找不到问题
问题根因
你代码中引入头文件的路径为tensorflow/lite/interpreter.h,编译器搜索头文件时,会在已配置的头文件目录下拼接该相对路径匹配文件。你的TFLite源码存放在/home/me/tensorflow_src/tensorflow/lite/,也就是说包含tensorflow文件夹的上级目录是/home/me/tensorflow_src/,之前没有将该目录加入头文件搜索范围,编译时自然会触发文件找不到的错误。
注意:不要直接把/home/me/tensorflow_src/tensorflow/lite/加入搜索路径,这种情况下你只能用#include "interpreter.h"的写法引入头文件,和你现有代码的引入路径不匹配。
方案1:修改Bash配置实现全局生效
该方案配置后对当前用户所有C++项目生效,操作步骤如下:
- 打开终端,编辑当前用户的bash配置文件:
nano ~/.bashrc - 滚动到文件最末尾,添加以下配置内容:
# 配置TFLite全局头文件搜索路径 export CPLUS_INCLUDE_PATH=/home/me/tensorflow_src:$CPLUS_INCLUDE_PATH # 配置TFLite预编译库搜索路径(后续链接库时需要) export LIBRARY_PATH=/home/me/tensorflow_src/bazel-bin/tensorflow/lite:$LIBRARY_PATH export LD_LIBRARY_PATH=/home/me/tensorflow_src/bazel-bin/tensorflow/lite:$LD_LIBRARY_PATH
- 按
Ctrl+O保存,Ctrl+X退出编辑器,执行source ~/.bashrc让配置立即生效。
风险提示:全局配置可能导致多个依赖不同版本TFLite的项目出现版本冲突,无特殊需求优先使用下面的项目级CMake配置方案。
方案2:修改项目CMake配置(无全局污染,推荐)
不需要修改任何系统全局配置,仅对你当前的C++项目生效,修改后的完整CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.22) project(mediafile_device_crossverification) set(CMAKE_CXX_STANDARD 17) set(OpenCV FOUND 1) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) # 加入TFLite头文件搜索路径 include_directories(/home/me/tensorflow_src) # 如果已经提前编译生成TFLite静态库,取消下面注释添加库搜索路径 # link_directories(/home/me/tensorflow_src/bazel-bin/tensorflow/lite) add_executable(mediafile_device_crossverification main.cpp src/VideoProcessing.cpp src/VideoProcessing.h) # 链接依赖库,已编译TFLite的话把tensorflowlite加入链接列表 target_link_libraries(mediafile_device_crossverification ${OpenCV_LIBS}) # target_link_libraries(mediafile_device_crossverification ${OpenCV_LIBS} tensorflowlite)
配置完成后,删除项目原有的build缓存目录,重新执行cmake、make编译流程即可。
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

