TensorFlow基准工具构建失败:多环境报错及解决方案求助
解决TensorFlow benchmark_model构建失败的系列问题
咱们一步步来解决你在编译TensorFlow benchmark_model时碰到的这几个问题:
问题1:ERROR: Config value monolithic is not defined in any .rc file(Mac环境)
这个错误有两个核心原因:一是Bazel不再读取指定路径的自定义rc文件,二是monolithic配置在新版TensorFlow中可能已被移除或替换。
解决方案:
- 先处理Bazel rc文件警告:把
/Users/user/external_projects/tensorflow/tools/bazel.rc里的内容,复制到你用户主目录的~/.bazelrc或者TensorFlow项目根目录的.bazelrc文件中,Bazel现在只会读取这些标准路径的配置文件。 - 移除构建命令中的
--config monolithic参数,新版TensorFlow编译Android目标时已经不需要这个配置了。修改后的构建命令如下:
如果需要静态编译Android库,可以尝试替换为bazel build -c opt --crosstool_top=//external:android/crosstool --cpu=armeabi-v7a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain tensorflow/tools/benchmark:benchmark_model--config=android_arm配置。
问题2:clang: error: unknown argument: '-m<platform_for_version_min>-version-min=10.14'(Mac环境,拉取最新master分支后)
这是旧版本Bazel(0.23.1)与新版macOS SDK/Clang不兼容导致的参数解析错误。
解决方案:
- 首先设置macOS部署目标环境变量,在执行构建命令前先运行:
export MACOSX_DEPLOYMENT_TARGET=10.14 - 或者在
~/.bazelrc中添加永久配置:build --macos_minimum_os=10.14 - 更彻底的办法是升级Bazel到TensorFlow master分支推荐的版本(比如5.3.0或更高),旧版本Bazel对新macOS工具链的支持存在缺陷,TensorFlow官方文档会标注当前分支对应的Bazel版本要求。
问题3:@com_google_absl//absl/container:raw_hash_set编译失败(Ubuntu 16环境)
这个问题主要是因为Ubuntu 16的默认工具链(gcc 5.x)和Bazel版本(0.22.0)太老,无法兼容新版TensorFlow依赖的Abseil库。
解决方案:
- 升级Bazel版本:TensorFlow master分支需要较新的Bazel(至少5.x版本),旧版Bazel(0.22.0)与新版Abseil的语法和构建规则不兼容。按照Bazel官方指引升级到对应版本。
- 升级编译器:Ubuntu 16默认的gcc 5.x不支持Abseil所需的C++17特性,安装gcc-7:
然后设置环境变量指定使用新编译器:sudo apt-get update && sudo apt-get install gcc-7 g++-7
之后再重新执行构建命令。export CC=gcc-7 export CXX=g++-7
额外提示
那个关于server_lib.h的警告属于代码结构提示,不影响构建,可以暂时忽略,优先解决编译失败的核心问题。
内容的提问来源于stack exchange,提问作者mrgloom
相关产品推荐
相关产品推荐

