构建TensorFlow:bazel在非标准目录

时间:2017-06-13 04:14:22

标签: tensorflow bazel

我正在尝试使用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。

我做:

1)./ configure 我选择的唯一非默认选项是使用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失败:protoc失败:错误执行命令bazel-out / host / bin / external / protobuf / protoc' - python_out = bazel-out / local-opt / genfiles /'-我。 -一世。 -Iexternal / protobuf / python -Iazazel-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需要)

.....

谢谢你, 伊戈尔

1 个答案:

答案 0 :(得分:0)

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

如果我在那个段落的某处遗失了你,请告诉我。)