2017-06-13 36 views
3

我想在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中选择它? 根据谷歌许多人有这个麻烦,但我找不到解决方案,将为我工作。在Ubuntu 16.04下构建TensorFlow时,我没有任何问题,它在标准位置具有足够新的gcc。building TensorFlow:bazel无法在非标准目录中找到libstdC++

我做的:

1)运行./configure 唯一的非默认的选项,我选择是使用MKL和下载MKL

2)巴泽勒构建--config = MKL --copt =“ - DEIGEN_USE_VML” -s -c选择// tensorflow /工具/ pip_package:build_pip_package

.....

例如/ example_parser_configuration.proto tensorflow /核心/ protobuf的/ control_flow.proto tensorflow /核心/ protobuf的/ meta_graph .proto tensorflow/core/protobuf/scratch/midway2/ivy2错误:/ scratch/midway2/ivy2/core/util/test_log.proto错误:/ scratch/midway2/ivy2/TF_intel/tensorflow/tensorflow/tools/tfprof/BUILD:42:1:null失败:protoc失败:错误执行命令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:Process退出状态1. bazel-out/host/bin/external/protobuf/protoc:/lib64/libstdc++.so.6:版本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(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)

.....

谢谢 伊戈尔

回答

0

对于慢速回复感到抱歉。设计Bazel在运行操作时会忽略LD_LIBRARY_PATH。在C++工具链检测期间,它不必忽略它们,但目前它确实:/为了帮助您转发,我会尝试添加--sysroot =作为linkopt或使用bazel grte_top标志。根据您的libstdC++。所在的位置,您可能需要禁用沙箱。原则性的解决方案是编写一个指定builtin_sysroot或grte_top的自定义CROSSTOOL。但这不是一件容易的事。

让我知道如果我失去了你在那个段落:)