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

使用CMake和NDK 26b构建TFLite 2.14.0静态库遇链接错误求助

关于NDK 26b构建TFLite 2.14.0静态库的链接错误问题

有没有人成功用CMake和NDK 26b为Android原生项目构建TFLite 2.14.0静态库?我能通过NDK 26b构建出TensorFlow 2.14.0 Lite静态库,但后续在项目中使用时出现大量未定义符号的链接错误。

已知TensorFlow推荐的稳定构建NDK版本是21e,查过TensorFlow的Git问题页面没找到满意的解决方案,部分帖子提到TensorFlow可能支持NDK 25c,但用这个版本构建也会出现同样的问题。

我的CMake构建命令如下:

cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=28 \
-DTFLITE_ENABLE_RUY=OFF -DTFLITE_ENABLE_NNAPI=OFF -DTFLITE_ENABLE_GPU=OFF \
-DTFLITE_ENABLE_XNNPACK=OFF -DTFLITE_ENABLE_MMAP=OFF \
-DTENSORFLOW_LITE_BUILD_STATIC_LIBS=ON ../tensorflow/lite

cmake --build . -j 8

其中NDK_ROOT指向NDK 26b(也曾尝试NDK 25c)的根目录。

奇怪的是,即使通过-DTFLITE_ENABLE_RUY=OFF禁用RUY,配置后仍显示RUY处于启用状态。生成的libtensorflow-lite.a静态库看似正常,但在项目中使用时出现大量RUY及rfft2d相关的未定义符号链接错误(部分深层符号引用已省略):

ld.lld: error: undefined symbol: ruy::get_ctx(ruy::Context*)
>>> referenced by ruy.h:47 (ruy/ruy/ruy.h:47)

ld.lld: error: undefined symbol: ruy::Ctx::clear_performance_advisories()
>>> referenced by frontend.h:90 (ruy/ruy/frontend.h:90)

ld.lld: error: undefined symbol: ruy::MulFrontEndFromTrMulParams(ruy::Ctx*, ruy::TrMulParams*)
>>> referenced by frontend.h:94 (ruy/ruy/frontend.h:94)

ld.lld: error: undefined symbol: ruy::Ctx::SelectPath(ruy::Path)
>>> referenced by create_trmul_params.h:423 (ruy/ruy/create_trmul_params.h:423)

ld.lld: error: undefined symbol: rdft2d
>>> referenced by rfft2d.cc:308 (/Developer/ThirdParty/TensorFlow/tensorflow-2.14.0/tensorflow/lite/kernels/rfft2d.cc:308)

ld.lld: error: undefined symbol: ruy::Context::mutable_thread_pool()

ld.lld: error: undefined symbol: ruy::ThreadPool::ExecuteImpl(int, int, ruy::Task*)
>>> referenced by thread_pool.h:77 (ruy/ruy/thread_pool.h:77)

ld.lld: error: undefined symbol: util::Fingerprint64(char const*, unsigned long)

ld.lld: error: undefined symbol: ruy::Context::set_max_num_threads(int)

ld.lld: error: undefined symbol: ruy::Context::Context()

ld.lld: error: undefined symbol: pthreadpool_destroy

ld.lld: error: undefined symbol: flatbuffers::ClassicLocale::instance_

ld.lld: error: undefined symbol: ruy::Ctx::set_performance_advisory(ruy::PerformanceAdvisory)

ld.lld: error: undefined symbol: ruy::Ctx::GetMainAllocator()

ld.lld: error: undefined symbol: ruy::Kernel8bitNeonDotprod1Col(ruy::KernelParams8bit<8, 8> const&)

ld.lld: error: undefined symbol: ruy::Kernel8bitNeonDotprodA55ish(ruy::KernelParams8bit<8, 8> const&)
>>> referenced by kernel_arm.h:125 (ruy/ruy/kernel_arm.h:125)

ld.lld: error: undefined symbol: ruy::Kernel8bitNeonDotprodX1(ruy::KernelParams8bit<8, 8> const&)
>>> referenced by kernel_arm.h:127 (ruy/ruy/kernel_arm.h:127)

ld.lld: error: undefined symbol: ruy::Kernel8bitNeonDotprod(ruy::KernelParams8bit<8, 8> const&)
>>> referenced by kernel_arm.h:129 (ruy/ruy/kernel_arm.h:129)

ld.lld: error: undefined symbol: ruy::Context::~Context()

ld.lld: error: undefined symbol: ruy::Kernel8bitNeon1Col(ruy::KernelParams8bit<4, 4> const&)
>>> referenced by kernel_arm.h:70 (ruy/ruy/kernel_arm.h:70)

ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

用objdump/nm工具查看,确认这些符号确实未定义。而使用NDK 21e构建TensorFlow 2.0.0时,项目可正常构建运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:02:16