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

CMake编译TFLite适配Android NDK(22+)遇编译错误求助

解决Android NDK 22+下CMake编译TFLite的系列问题

一、修复Ninja构建工具缺失问题

不用单独安装系统级Ninja,直接调用NDK自带版本。NDK 22+的$ANDROID_NDK/build/cmake/bin目录下已内置Ninja,通过CMake配置指定路径即可:

  • 在CMakeLists.txt中添加:
    set(CMAKE_MAKE_PROGRAM ${ANDROID_NDK}/build/cmake/bin/ninja CACHE PATH "Ninja build tool")
    
  • 或在执行CMake命令时通过参数指定:
    cmake .. -DCMAKE_MAKE_PROGRAM=${ANDROID_NDK}/build/cmake/bin/ninja
    

二、解决依赖库下载失败问题

TFLite编译时自动下载的依赖(如abseil、flatbuffers)若因网络问题失败,可通过两种方式处理:

  • 禁用自动下载:在CMakeLists.txt中添加set(TFLITE_ENABLE_DOWNLOADS OFF CACHE BOOL "Disable automatic dependency downloads")
  • 手动补全依赖:将对应依赖源码下载后,放到tensorflow/lite/tools/make/downloads目录,保持与TFLite预期的目录结构一致。

三、解决Python头文件及pyconfig.h缺失问题

核心原因是你误引用了主机(Debian)的Python库,而非针对Android交叉编译的版本。NDK本身不带Python,推荐优先禁用Python依赖(除非你确实需要Python绑定):

方案1:禁用TFLite的Python支持(推荐)

检查CMake配置,关闭所有Python相关编译选项:

set(TFLITE_BUILD_PYTHON OFF CACHE BOOL "Disable Python build")
set(TFLITE_ENABLE_PYTHON OFF)

这样编译时会跳过Python相关模块,无需再寻找头文件和库。

方案2:交叉编译Python for Android(仅当必须使用Python时)

  1. 下载与主机版本一致的Python源码(如3.9),用NDK交叉编译工具链编译:
    • 设置交叉编译环境变量:
      export TOOLCHAIN=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64
      export TARGET=aarch64-linux-android
      export API=22
      export AR=${TOOLCHAIN}/bin/llvm-ar
      export CC=${TOOLCHAIN}/bin/${TARGET}${API}-clang
      export AS=${CC}
      export CXX=${TOOLCHAIN}/bin/${TARGET}${API}-clang++
      export LD=${TOOLCHAIN}/bin/ld
      export RANLIB=${TOOLCHAIN}/bin/llvm-ranlib
      export STRIP=${TOOLCHAIN}/bin/llvm-strip
      
    • 配置并编译安装:
      ./configure --host=${TARGET} --build=x86_64-linux-gnu --prefix=/path/to/android/python/install --enable-shared --disable-ipv6
      make && make install
      
  2. 在CMake中指定交叉编译后的Python路径:
    set(Python3_ROOT_DIR "/path/to/android/python/install")
    set(Python3_INCLUDE_DIRS "${Python3_ROOT_DIR}/include/python3.9")
    set(Python3_LIBRARIES "${Python3_ROOT_DIR}/lib/libpython3.9.so")
    

四、完整CMake配置示例(针对Android NDK)

cmake_minimum_required(VERSION 3.18)
project(tflite_android)

# 指定NDK路径(若未通过环境变量传递)
set(ANDROID_NDK "/path/to/your/android-ndk-r22b" CACHE PATH "Android NDK path")
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 22) # 最低API版本
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set(CMAKE_ANDROID_NDK ${ANDROID_NDK})
set(CMAKE_ANDROID_STL_TYPE c++_shared) # 使用c++_shared STL

# 使用NDK自带Ninja
set(CMAKE_MAKE_PROGRAM ${ANDROID_NDK}/build/cmake/bin/ninja CACHE PATH "Ninja build tool")

# 禁用TFLite自动下载和Python支持
set(TFLITE_ENABLE_DOWNLOADS OFF CACHE BOOL "Disable dependency downloads")
set(TFLITE_BUILD_PYTHON OFF CACHE BOOL "Disable Python build")

# 添加TFLite源码目录
add_subdirectory(path/to/tensorflow/lite)

# 你的项目目标
add_library(your_app SHARED your_app.cpp)
target_link_libraries(your_app PRIVATE tensorflow-lite)

内容的提问来源于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 10:10:31