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

添加__android_log_print后libtensorflowlite_jni.so加载失败求助

解决Android 7.1设备加载含__android_log_print的TensorFlow Lite库失败问题

我来帮你排查这个问题——这个错误本质上是你的libtensorflowlite_jni.so在运行时找不到__android_log_print的实现,大概率是编译TFLite源码时没正确链接Android系统的log库导致的。结合你用的NDK r14b,咱们一步步解决:

1. 优先检查TFLite源码编译时的链接配置

__android_log_print属于Android系统的liblog.so库,必须在编译时显式链接它才能让符号被正确解析:

  • 如果是用Android.mk编译:确保在对应的模块中添加LOCAL_LDLIBS += -llog,比如在tensorflow/lite/java/jni/Android.mk里找到对应的LOCAL_MODULE块,加上这一行。
  • 如果是用CMakeLists.txt编译:在构建tensorflowlite_jni目标时,添加target_link_libraries(tensorflowlite_jni log),把log库作为依赖链接进去。
  • 如果是用Bazel编译:在BUILD文件的cc_library或cc_binary规则中,添加linkopts = ["-llog"],保证链接阶段引入log库。

2. 验证Android Studio项目的配置细节

虽然你提到已经加了配置,但再确认几个关键点:

  • 检查app/build.gradle中defaultConfig.ndk的abiFilters是否和你的Android 7.1设备匹配,比如设备是32位armeabi-v7a,就配置abiFilters 'armeabi-v7a',避免编译的so库ABI和设备不兼容。
  • 确认jniLibs目录下的so文件是你新编译的版本,有没有被旧的未链接log库的so覆盖。

3. 排查NDK r14b的兼容性问题

NDK r14b是比较老旧的版本(2017年发布),虽然兼容Android 7.1(API 25),但可能存在一些链接行为的细节问题:

  • 确保编译TFLite时指定的APP_PLATFORM(Android.mk)或minSdkVersion(gradle)和设备API level一致,比如设置为android-25,避免因API level不匹配导致系统符号无法找到。
  • 如果条件允许,尝试升级NDK到r17及以上的稳定版本(比如r21e),旧NDK在处理系统库符号时可能存在小bug,升级后大概率能解决问题。

4. 用工具验证so库的符号表

用NDK自带的nm工具检查你的libtensorflowlite_jni.so,确认__android_log_print的符号状态:

  • 打开终端,进入NDK目录的工具链路径(比如ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/),执行命令:
    ./arm-linux-androideabi-nm -D libtensorflowlite_jni.so | grep __android_log_print
    
  • 如果输出带U标记,说明是未定义符号,回到第一步修正链接配置;如果带T标记,说明符号已正确链接,那大概率是ABI不匹配或设备系统异常(这种情况极少)。

5. 确认应用加载so的逻辑

检查TFLiteCameraDemo中加载so的代码,确保是System.loadLibrary("tensorflowlite_jni"),没有拼写错误,也没有重复加载其他版本的so库导致冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:54:16