You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目CMake构建TFLite时Python头文件找不到的问题

问题

在Android项目中使用CMake构建TensorFlow Lite(TFLite),该方法已在同项目的Debian Linux版本上成功运行。按照官方文档编译arm64版本时,Android Studio构建/运行后出现如下错误:

In file included from /home/user/Desktop/official_stuff/tensorflow_src/tensorflow/lite/python/interpreter_wrapper/numpy.cc:17:
In file included from /home/user/Desktop/official_stuff/tensorflow_src/tensorflow/lite/python/interpreter_wrapper/numpy.h:49:
In file included from /usr/include/python3.9/Python.h:8:
/usr/include/python3.9/pyconfig.h:9:12: fatal error: 'aarch64-linux-gnu/python3.9/pyconfig.h' file not found

打开报错文件可见该行代码:#include <aarch64-linux-gnu/python3.9/pyconfig.h>,系统正在搜索该文件。执行sudo find / -name "aarch64-linux-gnu"确认文件已安装,且在/usr/include/aarch64-linux-gnu下找到python3.9/pyconfig.h。

操作步骤:

  • sudo git clone https://github.com/tensorflow/tensorflow.git /home/user/Desktop/official_stuff/tensorflow_src
  • curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
  • mkdir -p ${HOME}/toolchains
  • tar xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C ${HOME}/toolchains
  • 执行CMake命令:
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-
ARMCC_FLAGS="-funsafe-math-optimizations"
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  ../tensorflow/lite/
  • 执行dpkg --add-architecture arm64、apt-get update、sudo apt install libpython3-dev:arm64
  • 连接Android设备后点击构建/运行,编译抛出上述错误。

CMake代码片段:

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/official_stuff/tensorflow_src" ABSOLUTE)
endif()
add_library(tensorflowlite SHARED IMPORTED)
add_subdirectory(
  "/home/user/Desktop/official_stuff/tensorflow_src/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL
)
...
target_link_libraries(
        my_proj

        tensorflow-lite
)

环境:Debian 11


解决方案

核心问题分析

你的编译配置混淆了Linux aarch64交叉编译和Android NDK编译:你用了针对Linux的aarch64工具链,但实际要编译的是Android平台的TFLite,Android的系统ABI是arm64-v8a,和Linux aarch64的头文件路径、系统库结构完全不同,导致Python交叉编译头文件路径匹配失败。

具体修复步骤

  1. 替换工具链为Android NDK
    放弃手动下载的Linux aarch64 GCC工具链,改用Android Studio自带的NDK(推荐r21e及以上版本,兼容性更好)。在CMake中指定NDK的工具链文件:

    set(ANDROID_NDK "/path/to/your/android/ndk") # 示例路径:~/Android/Sdk/ndk/25.2.9519653
    set(CMAKE_TOOLCHAIN_FILE "${ANDROID_NDK}/build/cmake/android.toolchain.cmake")
    set(ANDROID_ABI "arm64-v8a")
    set(ANDROID_PLATFORM android-24) # 适配你的设备最低API等级
    
  2. 禁用Python相关模块编译
    Android项目不需要TFLite的Python绑定(interpreter_wrapper/numpy.cc属于Python模块),在CMake中添加编译选项关闭Python支持:

    set(TFLITE_ENABLE_PYTHON OFF CACHE BOOL "")
    

    或者在执行CMake命令时追加参数:

    cmake ... -DTFLITE_ENABLE_PYTHON=OFF ../tensorflow/lite/
    
  3. 修正CMake交叉编译配置
    移除原CMake命令中针对Linux的配置,改为Android平台的标准交叉编译参数:

    cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
      -DANDROID_ABI=arm64-v8a \
      -DANDROID_PLATFORM=android-24 \
      -DCMAKE_C_FLAGS="-funsafe-math-optimizations" \
      -DCMAKE_CXX_FLAGS="-funsafe-math-optimizations" \
      -DCMAKE_VERBOSE_MAKEFILE=ON \
      -DTFLITE_ENABLE_PYTHON=OFF \
      ../tensorflow/lite/
    
  4. 清理旧构建目录重新编译
    删除之前的CMake构建目录,避免旧配置残留:

    rm -rf build && mkdir build && cd build
    # 重新执行上述修正后的CMake命令
    

额外验证

如果仍有头文件路径问题,手动指定arm64 Python头文件的搜索路径到CMake中:

include_directories(/usr/include/aarch64-linux-gnu/python3.9)

但优先推荐关闭Python支持,因为Android应用通常不需要TFLite的Python接口。

内容的提问来源于stack exchange,提问作者Turgut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:10:49