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

TensorFlow 2.13.0 C++推理测试遇Protobuf致命错误求助

解决Slackware下TensorFlow C++ API运行时Protobuf重复描述符错误

错误原因

该错误是由于Protobuf描述符数据库重复添加了tensorflow/compiler/xla/service/cpu/xla_framework.proto文件的描述信息,通常是Protobuf库版本冲突或重复链接不同实例的Protobuf库导致的——Ubuntu 22.04默认的Protobuf版本与TensorFlow 2.13.0编译依赖的版本匹配,因此未触发该问题。

解决方法

1. 校验Protobuf版本一致性

  • 查看系统自带Protobuf版本:
    protoc --version
    
  • TensorFlow 2.13.0默认依赖Protobuf 3.21.9,若系统版本与该版本不符,需二选一:
    • 重新编译TensorFlow,适配系统当前的Protobuf版本;
    • 替换系统Protobuf为3.21.9版本(注意:替换系统库可能影响其他依赖Protobuf的程序)。

2. 编译TensorFlow时强制使用动态Protobuf库

编译TensorFlow时若静态链接了Protobuf,会与系统动态Protobuf库产生冲突,需添加编译参数强制使用动态库:

bazel build --define=protobuf_use_dynamic_library=true //tensorflow:libtensorflow_cc.so //tensorflow:libtensorflow_framework.so

重新编译TensorFlow C++ API后再测试。

3. 修正测试程序的编译链接配置

检查测试程序的编译脚本(如CMakeLists.txt),确保只链接TensorFlow自带的Protobuf库,避免同时链接系统Protobuf库:

  • 示例CMake配置:
    find_package(TensorFlow REQUIRED)
    add_executable(inference_test inference_test.cpp)
    target_link_libraries(inference_test ${TensorFlow_LIBRARIES})
    

4. 清理编译缓存

清理TensorFlow和测试程序的旧编译缓存,避免残留的冲突文件:

# 清理TensorFlow的Bazel缓存
bazel clean --expunge
# 清理测试程序的编译目录
rm -rf build && mkdir build && cd build

之后重新编译测试程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:45:06