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

使用NDK 25+与Bazel构建Android版TFLite C++库遇阻求助

解决NDK 25+环境下编译TFLite Android库的问题

一、解决configure脚本的NDK兼容错误

你遇到的FileNotFoundError是因为NDK 23及以上版本移除了platforms目录,改用meta/platforms.json存储API级别信息,而当前使用的TensorFlow版本的configure.py脚本仍依赖旧目录结构。同时Bazel提示NDK25不在官方支持列表,可通过以下方案解决:

方案1:切换到适配高版本NDK的TensorFlow分支

切换到TensorFlow 2.15或更高版本(这些版本已适配NDK 23+的目录结构),重新执行配置流程:

git checkout r2.15
./configure

配置时指定NDK路径后,脚本会自动读取meta/platforms.json获取API级别,不会再触发目录不存在的错误。

方案2:手动修改configure.py脚本

若必须使用当前TensorFlow版本,可修改configure.py中的get_ndk_api_level函数,替换为读取meta/platforms.json的逻辑:

def get_ndk_api_level(environ_cp, android_ndk_home):
    import json
    platforms_json_path = os.path.join(android_ndk_home, "meta", "platforms.json")
    with open(platforms_json_path, "r") as f:
        platforms_data = json.load(f)
    api_levels = sorted([int(k.split("-")[1]) for k in platforms_data["platforms"].keys() if k.startswith("android-")])
    return max(api_levels)

修改后重新运行./configure即可完成正常配置。

二、解决链接错误:undefined symbol: tflite::impl::Interpreter::Invoke()

你使用--fat_apk_cpu=arm64-v8a编译出的库并非针对Android的交叉编译产物,而是默认编译了主机(x86-64)架构的库,导致Android链接时找不到对应arm64-v8a的符号。正确的编译命令应为:

bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so

确保执行该命令前已通过上述方案解决configure的NDK兼容问题,这样编译出的才是适配arm64-v8a的Android库。

三、使用官方预编译的TFLite C++库

无需自行编译,TensorFlow提供了针对Android各架构的预编译TFLite C++库:

  • 选择2.15+版本的预编译包(适配NDK25+环境)
  • 解压后提取lib/android/arm64-v8a/libtensorflowlite.so文件
  • 配合解压得到的include目录下的头文件,直接在Android项目中引入即可

预编译包包含完整的符号定义,不会出现链接错误,能直接满足项目需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:46:33