CMake链接TensorFlow Lite Micro静态库提示.h头文件不存在问题求助
问题根因
你报错的核心原因是头文件引用路径和已添加的Include搜索目录不匹配:
你代码里引用的是tensorflow/lite/c/common.h,但你在编译参数里添加的Include路径是/home/yahya/Mbed Programs/ozon-2021-fw/tensorflow/lite/c,编译器会在该路径下拼接你写的引用路径,最终查找的实际路径为/home/yahya/Mbed Programs/ozon-2021-fw/tensorflow/lite/c/tensorflow/lite/c/common.h,该路径显然不存在,因此报错。
解决方案
按优先级依次执行以下操作:
- 修正Include目录配置
打开tensorflow目录下的CMakeLists.txt,修改target_include_directories配置:
- 删除冗余的
${CMAKE_CURRENT_LIST_DIR}/lite/c/条目 - 新增tensorflow父目录(也就是项目根目录)到Include路径,修改后相关配置如下:
target_include_directories(generic-tflmicro INTERFACE ${CMAKE_CURRENT_LIST_DIR}/../ ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/third_party/gemmlowp ${CMAKE_CURRENT_LIST_DIR}/third_party/flatbuffers/include ${CMAKE_CURRENT_LIST_DIR}/third_party/ruy ${CMAKE_CURRENT_LIST_DIR}/third_party/kissfft $<INSTALL_INTERFACE:lite/c> )
该配置符合TFLite Micro官方的头文件引用规范,编译器可以从项目根目录出发,正确找到tensorflow/lite/c/common.h文件。
如果你不想修改CMake配置,也可以直接把代码里的头文件引用改成#include "common.h",也能解决当前问题,但后续引用其他TFLite头文件时可能还会遇到同类路径问题。
- 清理冗余的CMake配置
你现有配置里有两处冗余配置可能引发后续问题,建议同步修正:
target_include_directories中同时写了.和${CMAKE_CURRENT_LIST_DIR},二者完全等价,删除其一即可target_compile_definitions中的COMPILE_DEFINITIONS前缀属于多余写法,直接写宏名即可,修正后如下:
target_compile_definitions( generic-tflmicro INTERFACE TF_LITE_STATIC_MEMORY # LINUX TF_LITE_USE_CTIME )
- 清理缓存重新编译
修改完配置后,完全删除旧的build构建目录,重新执行CMake生成构建文件,再编译项目,避免旧缓存的配置残留生效。
如果以上操作完成后仍报错,建议把项目迁移到不含空格的路径下(你现有路径中的Mbed Programs带空格,部分构建工具对带空格的路径兼容不好),再重新编译即可。
内容的提问来源于stack exchange,提问作者Yahya Tawil
相关产品推荐
相关产品推荐

