我在Caffe编译方面遇到了困难。不幸的是,我没有成功编译它。
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)
尝试解决问题的方法
第一次尝试
通常简单的解决方案是最好的,所以(如此处建议的那样),我尝试从/usr/include/host_config.h
(第82行)中注释掉检查gcc
版本的宏。不幸的是,这并没有奏效,编译失败了:
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
)。
第三次尝试
我找到了一个类似的问题(虽然与Caffe无关),并尝试按照被接受的答案建议的方法解决。
我所做的:
- 我运行了
grep -iR "find_package(CUDA" caffe
命令,找到了Cuda.cmake
文件,在第 225 行有find_package(CUDA 5.5 QUIET)
。 - 我在
Cuda.cmake
中的find_package(CUDA 5.5 QUIET)
前一行添加了set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8)
。 - 我清空了
build
目录中的所有内容,并重新运行了cmake
和make
命令,包括和不包括-D CMAKE_CXX_COMPILER=g++-4.8
。
不幸的是,结果完全相同。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问题:
CPU_ONLY := 1
,会发生什么?你能否构建仅限于CPU的caffe版本? - Shai/usr/bin/nvcc -M -D__CUDACC__ (...)
命令,导致出现错误消息。这行明确说明问题涉及Caffe编译过程中运行的GPU编译。据我所知,在Linux上,nvcc
内部使用gcc
。请参见nvcc --help
以查看--compiler-bindir
(-ccbin
)参数描述。 - patryk.beza