如何强制Bazel使用gcc?

时间:2018-01-18 11:32:20

标签: c++ gcc build bazel

  

Ubuntu 17.10

     

GCC版本:5.4

     

Bazel版本:0.9.0

     

TensorFlow:r1.5

     

CUDA 8.0 / cuDNN 6 / GTX 1080 Ti

如何让Bazel使用gcc从源代码构建TensorFlow?

构建时,遇到编译错误,如:

error: 'errno' was not declared in this scope
while (nanosleep(&ts, &ts) != 0 && errno == EINTR) {}

设置--verbose_failures标志,它显示它不使用/ usr / bin / gcc-5或/ usr / bin / gcc进行编译

external/local_config_cuda/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=1' -fstack-protector -fPIE -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 -DNDEBUG -ffunction-sections -fdata-sections -g0 -DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK '-march=native' '-std=c++11' -g0 -MD -MF

在线搜索,我发现gcc和CC的路径,CXX变量必须在tools / cpp / CROSSTOOL中设置。但究竟哪里有tools / cpp / CROSSTOOL?我如何强迫bazel使用gcc-5?

1 个答案:

答案 0 :(得分:0)

我对cuda和tensorflow几乎一无所知,但是在使用cuda进行编译时,tensorflow没有使用与bazel autoconfigures相同的C ++工具链,因此CC env变量技巧不起作用。文件crosstool_wrapper_driver_is_not_gcc只是一个shell包装器,理论上仍然可以调用你的gcc(或者它将是cuda)。我用--subcommands运行bazel来查看失败动作的完全调用,然后在没有bazel的情况下重现,然后从那里开始。