按官方教程编译libtensorflowlite.so无报错,但生成的共享文件为空
这种情况我之前帮不少开发者排查过,大概率是编译指令或配置出了问题,导致bazel只生成了一个空的符号链接占位文件,而非真正包含核心实现的共享库。下面是几个针对性的排查和修复步骤:
确认build目标的正确性
官方教程里的正确目标应该是//tensorflow/lite:libtensorflowlite.so,很多人会不小心写错目标路径(比如漏掉:libtensorflowlite.so后缀),导致生成空文件。你要确保执行的编译指令是类似这样的:bazel build -c opt //tensorflow/lite:libtensorflowlite.so如果是针对Android平台编译,还要加上对应的配置参数:
bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so重新执行配置脚本,确保依赖完整
编译前没有正确配置环境,或者依赖库(比如protobuf、flatbuffers)缺失,会导致bazel跳过核心模块的编译。建议先清理现有配置,重新执行TensorFlow根目录下的configure脚本:rm .bazelrc ./configure执行过程中,关于TensorFlow Lite的相关选项(比如是否启用XNNPACK、是否支持Android NDK等)要根据需求正确选择,不要随便跳过关键配置。
清理bazel缓存,从头编译
bazel的增量缓存有时候会出现异常,导致部分模块编译不完整。可以彻底清理缓存后重新编译:bazel clean --expunge bazel build -c opt //tensorflow/lite:libtensorflowlite.so这个过程会比较耗时,但能排除缓存带来的大部分问题。
检查编译日志的隐蔽信息
虽然你说没有提示错误,但可能有些警告或跳过编译的信息被忽略了。可以把编译输出重定向到日志文件,仔细查看细节:bazel build -c opt //tensorflow/lite:libtensorflowlite.so > build.log 2>&1打开
build.log,搜索“skipping”“missing”“error”这类关键词,看看有没有模块因为依赖缺失被跳过的情况。切换到稳定版本的TensorFlow源码
如果你用的是开发分支(比如master分支的最新代码),可能存在编译脚本的临时bug。建议切换到官方推荐的稳定版本,比如TensorFlow 2.15.x这类长期支持分支,再尝试编译。
按照上面的步骤排查,基本能解决libtensorflowlite.so文件极小的问题。
内容的提问来源于stack exchange,提问作者RyanLiu

