由于不支持的gcc编译器版本,Caffe编译失败

时间:2015-12-21 20:00:36

标签: gcc cuda g++ caffe nvcc

我正在努力进行Caffe编译。不幸的是我没能编译它。

Steps我跟着:

git clone https://github.com/BVLC/caffe.git
cd caffe
mkdir build
cd build
cmake ..
make all

运行make all失败,并显示以下错误消息:

[  2%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_im2col.cu.o
In file included from /usr/include/cuda_runtime.h:59:0,
                 from <command-line>:0:
/usr/include/host_config.h:82:2: error: #error -- unsupported GNU version! gcc 4.9 and up are not supported!
 #error -- unsupported GNU version! gcc 4.9 and up are not supported!
  ^
CMake Error at cuda_compile_generated_im2col.cu.o.cmake:207 (message):
  Error generating /mydir/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/util/./cuda_compile_generated_im2col.cu.o

软件版本:

  • 操作系统:Debian
  • gcc版本:5.3.1
  • nvcc版本:6.5.12
  • cat /proc/driver/nvidia/version结果:
NVRM version: NVIDIA UNIX x86_64 Kernel Module  352.63  Sat Nov  7 21:25:42 PST 2015
GCC version:  gcc version 4.8.5 (Debian 4.8.5-3) 

尝试解决问题

第一次尝试

简单的解决方案通常是最好的解决方案,因此(建议here)我试图从gcc(第82行)注释掉宏检查/usr/include/host_config.h版本。不幸的是,它没有工作,编译失败了:

1 catastrophic error detected in the compilation of "/tmp/tmpxft_000069c2_00000000-4_im2col.cpp4.ii".

第二次尝试

我试图跑:

cmake -D CMAKE_CXX_COMPILER=g++-4.8 ..
make

但它失败,完全出现相同的错误消息(即使应该接受g++-4.8)。

第三次尝试

我找到了similar problem(虽然与 Caffe 无关),我试图按照接受的答案中的建议解决它。

我做了什么:

  1. 我已经运行了grep -iR "find_package(CUDA" caffe命令,找到Cuda.cmake225 find_package(CUDA 5.5 QUIET)的文件。
  2. 我将set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8)添加到Cuda.cmake,行前一行:find_package(CUDA 5.5 QUIET)
  3. 我删除了build目录中的所有内容,并再次运行cmakemake - 包括和不包含-D CMAKE_CXX_COMPILER=g++-4.8
  4. 不幸的是结果完全一样。 Caffe可能会以某种方式覆盖它 - 我没有弄清楚如何

    make VERBOSE=1 2>&1 | grep -i compiler-bindir什么都不返回。

    有趣的,make VERBOSE=1打印命令失败,即:

    /usr/bin/nvcc -M -D__CUDACC__ /mydir/caffe/src/caffe/util/im2col.cu -o /mydir/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_im2col.cu.o.NVCC-depend -ccbin /usr/bin/cc -m64 -DUSE_LMDB -DUSE_LEVELDB -DUSE_OPENCV -DWITH_PYTHON_LAYER -DGTEST_USE_OWN_TR1_TUPLE -Xcompiler ,\"-fPIC\",\"-Wall\",\"-Wno-sign-compare\",\"-Wno-uninitialized\",\"-O3\",\"-DNDEBUG\" -gencode arch=compute_20,code=sm_21 -Xcudafe --diag_suppress=cc_clobber_ignored -Xcudafe --diag_suppress=integer_sign_change -Xcudafe --diag_suppress=useless_using_declaration -Xcudafe --diag_suppress=set_but_not_used -Xcompiler -fPIC -DNVCC -I/usr/include -I/mydir/caffe/src -I/usr/include -I/mydir/caffe/build/include -I/usr/include/hdf5/serial -I/usr/include/opencv -I/usr/include/atlas -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/mydir/caffe/include -I/mydir/caffe/build
    

    当我手动添加--compiler-bindir /usr/bin/gcc-4.8标志时,它会输出错误:

    nvcc fatal   : redefinition of argument 'compiler-bindir'
    

    可能与this错误报告有关。

    修改:我没有注意到--compiler-bindir-ccbin是相同的选项,而后者已在上面的命令中设置失败。当我在失败的上述命令中将-ccbin /usr/bin/cc更改为-ccbin /usr/bin/gcc-4.8时,它成功完成。现在我需要在Caffe的CMake文件中找到覆盖所有后续Caffe的CMakes -ccbin的选项。看cmake/Cuda.cmake:252:list(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA}似乎是个好方法。

    如何成功完成编辑?任何帮助表示赞赏。

    相关的SO问题:

2 个答案:

答案 0 :(得分:6)

cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.8" .. && make会导致成功编译

现在又出现了另一个问题:链接Google的libgflagslibprotobuf失败可能是因为它是使用较新的gcc版本编译的,但它不是与被问到的问题有关。

答案 1 :(得分:1)

我的机器运行Ubuntu 15.10,我的默认编译器版本是gcc 5.2.1。

在文件<115的文件

中注释#error指令
/usr/local/cuda-7.5/include/host_config.h 

(或者你系统上的任何路径)为我做了诀窍。 Caffe汇编得很好,所有测试都顺利进行。

另一方面,如果选择忽略这一点并继续使用一个编译器版本编译项目的一部分,项目的一部分与另一个(对我来说是gcc-4.8和gcc-5.2.1),链接会出现问题。另一个答案提到的protobuf和libgflags的链接问题与 无关。