CentOS7编译TensorFlow Serving 2.5.1报absl库未定义错误怎么办
报错原因
- 该错误属于典型的abseil库ABI不兼容导致的链接失败,在CentOS 7 + TensorFlow Serving 2.5.1的场景下,核心诱因是CentOS 7默认搭载的gcc 4.8.5对C17标准支持不完整,而TensorFlow Serving 2.5.1依赖的absl lts_2020_09_23版本的部分接口需要符合C17标准的编译器编译,低版本gcc编译时会缺失对应符号的实现。
- 次要诱因是bazel构建时全局使用的C标准和abseil库编译时的C标准不一致,导致符号规则不匹配,无法找到对应定义。
解决方案
- 首先升级gcc版本到7.x及以上,推荐使用scl源安装gcc 8版本,执行如下命令:
yum install centos-release-scl -y yum install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils -y # 临时启用gcc 8,重启终端后失效,如需永久生效可写入~/.bashrc source /opt/rh/devtoolset-8/enable
安装完成后执行gcc -v确认版本为8.x系列即可。
- 调整编译命令,显式指定全局C++标准为17,修改后的编译命令如下:
bazel build --color=yes --curses=yes \ --verbose_failures \ --config=release \ --cxxopt=-std=c++17 \ --host_cxxopt=-std=c++17 \ --output_filter=DONT_MATCH_ANYTHING \ tensorflow_serving/model_servers:tensorflow_model_server
- 如果调整命令后仍报相同错误,可手动修改TensorFlow Serving源码根目录下的
.bazelrc文件,添加两行全局配置:
build --cxxopt=-std=c++17 build --host_cxxopt=-std=c++17
保存后重新执行编译命令即可。
内容的提问来源于stack exchange,提问作者lee sir
相关产品推荐
相关产品推荐

