构建 TensorFlow:bazel 在非标准目录中找不到 libstdc++
Posted
技术标签:
【中文标题】构建 TensorFlow:bazel 在非标准目录中找不到 libstdc++【英文标题】:building TensorFlow: bazel cannot find libstdc++ in non-standard directory 【发布时间】:2017-11-14 16:29:45 【问题描述】:我正在尝试在 Scientific Linux 7.2 上使用 bazel 0.5.1、gcc 6.2、binutils 2.28、Anaconda2 python 构建 MKL 加速版本的 TensorFlow。 显然系统 /lib64/libstdc++.so.6 太旧了,所以我尝试使用安装在另一个目录中的 gcc。 PATH、LD_LIBRARY_PATH 被修改为添加相应的路径(使用模块)。然而,虽然 bazel 可以为 gcc、ld、python 正确选择可执行文件,但它仍然会尝试加载旧系统 /lib64/libstdc++.so.6。如何强制它使用 gcc 6.2 中的那个?为什么它不从 LD_LIBRARY_PATH 中获取它? 根据谷歌的说法,很多人都遇到了这个问题,但我找不到适合我的解决方案。我在标准位置有足够新 gcc 的 Ubuntu 16.04 下构建 TensorFlow 没有任何问题。
我愿意:
1) ./配置 我选择的唯一非默认选项是使用 MKL 并下载 MKL
2) bazel build --config=mkl --copt="-DEIGEN_USE_VML" -s -c opt //tensorflow/tools/pip_package:build_pip_package
.....
example/example_parser_configuration.proto tensorflow/core/protobuf/control_flow.proto tensorflow/core/protobuf/meta_graph.proto tensorflow/core/protobuf/named_tensor.proto tensorflow/core/protobuf/saved_model.proto tensorflow/core/protobuf/ tensorflow_server.proto tensorflow/core/util/event.proto tensorflow/core/util/test_log.proto)
错误:/scratch/midway2/ivy2/TF_intel/tensorflow/tensorflow/tools/tfprof/BUILD:42:1: null failed: protoc failed: error execution command bazel-out/host/bin/external/protobuf/protoc'-- python_out=bazel-out/local-opt/genfiles/' -I. -一世。 -Iexternal/protobuf/python -Ibazel-out/local-opt/genfiles/external/protobuf/python ...(剩余 5 个参数已跳过):com.google.devtools.build.lib.shell.BadExitStatusException:进程以状态 1 退出。
bazel-out/host/bin/external/protobuf/protoc: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by bazel-out/host/bin/external/protobuf/protoc)
bazel-out/host/bin/external/protobuf/protoc: /lib64/libstdc++.so.6: version
CXXABI_1.3.8' not found (bazel-out/host/bin/external/protobuf/protoc 需要)
bazel-out/host/bin/external/protobuf/protoc: /lib64/libstdc++.so.6: 找不到版本“GLIBCXX_3.4.21”(bazel-out/host/bin/external/protobuf/protoc 需要)
.....
谢谢你, 伊戈尔
【问题讨论】:
【参考方案1】:抱歉回复缓慢。 Bazel 按设计在运行操作时忽略 LD_LIBRARY_PATH。在 C++ 工具链检测期间不必忽略它们,但目前它确实:/ 为了帮助您转发,我会尝试添加 --sysroot= 作为 linkopt 或使用 bazel grte_top 标志。根据您的 libstdc++.so 所在的位置,您可能需要禁用沙箱。原则性解决方案是编写一个自定义 CROSSTOOL,指定 builtin_sysroot 或 grte_top。但这不是一件容易的事。
如果我在那段的某个地方丢失了你,请告诉我:)
【讨论】:
以上是关于构建 TensorFlow:bazel 在非标准目录中找不到 libstdc++的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow 构建量化工具 - bazel 构建错误
从源代码构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?
nvcc 错误:使用 bazel 构建 tensorflow 时,'cicc' 以状态 0xC0000005 (ACCESS_VIOLATION) 死亡