сборка TensorFlow: bazel не может найти libstdc ++ в нестандартном каталоге

Я пытаюсь создать версию TensorFlow с ускорением MKL, используя bazel 0.5.1, gcc 6.2, binutils 2.28, Anaconda2 python в Scientific Linux 7.2. По-видимому, система /lib64/libstdc++.so.6 слишком старая, поэтому я пытаюсь использовать gcc, установленный в другом каталоге. PATH, LD_LIBRARY_PATH изменяются для добавления соответствующих путей (с использованием модулей). Однако, хотя у bazel нет проблем с правильным подбором исполняемых файлов для gcc, ld, python, он по-прежнему пытается загрузить старую систему /lib64/libstdc++.so.6. Как заставить его использовать тот, что от gcc 6.2? Почему не забирает из LD_LIBRARY_PATH? Согласно Google, у многих людей возникают проблемы с этим, но я не мог найти решение, которое подойдет мне. У меня не было проблем со сборкой TensorFlow под Ubuntu 16.04, который имеет достаточно новый gcc в стандартном месте.

I do:

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 tenorflow / core / util / event.proto tensorflow / core / util / test_log.proto) ОШИБКА: / scratch / midway2 / ivy2 / TF_intel / tensorflow / tensorflow / tools / tfprof / BUILD: 42: 1: ошибка null: ошибка протокола: ошибка при выполнении команды 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: versionCXXABI_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)

.....

Спасибо, игорь


person Igor Yakushin    schedule 13.06.2017    source источник


Ответы (1)


извините за медленный ответ. Bazel по замыслу игнорирует LD_LIBRARY_PATH при выполнении действий. Необязательно игнорировать их во время обнаружения инструментальной цепочки C ++, но на данный момент он это делает: / Чтобы помочь вам, я бы попытался добавить --sysroot = в качестве linkopt или использовать флаг bazel grte_top. В зависимости от того, где находится ваш libstdc ++. So, вам может потребоваться отключить песочницу. Принципиальным решением было бы написать собственный CROSSTOOL, в котором указывается builtin_sysroot или grte_top. Но это непростая задача.

Дай мне знать, если я тебя где-то в этом абзаце потерял :)

person hlopko    schedule 27.07.2017