我遵循的步骤:
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)
简单的解决方案往往是最好的,所以(如建议在这里)我试图注释掉宏观检查gcc
从版本/usr/include/host_config.h
(线82)。不幸的是,它不起作用,并且编译失败严重:
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
命令并找到了在第225行中的Cuda.cmake
文件。find_package(CUDA 5.5 QUIET)
set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8)
到。Cuda.cmake
find_package(CUDA 5.5 QUIET)
build
目录中删除了所有内容,cmake
然后make
再次运行-带和不带-D CMAKE_CXX_COMPILER=g++-4.8
。不幸的是结果是完全一样的。Caffe可能会以某种方式覆盖它-我没弄清楚怎么办。
make VERBOSE=1 2>&1 | grep -i compiler-bindir
什么也不返回。
有趣的是,make VERBOSE=1
失败的prints命令是:
/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'
这可能与此错误报告有关。
编辑:我没有注意到,--compiler-bindir
并且-ccbin
是相同的选项,并且后者已经在失败的上述命令中设置。当我在上述命令中更改-ccbin /usr/bin/cc
为-ccbin /usr/bin/gcc-4.8
失败时,它成功完成。现在,我需要在Caffe的CMake文件中找到可以覆盖-ccbin
所有后续Caffe的CMakes的选项。看cmake/Cuda.cmake:252:list(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA}
似乎是个好方法。
如何成功完成编译?任何帮助表示赞赏。
相关的SO问题:
cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.8" .. && make
导致成功编译。
现在出现了另一个问题:链接Googlelibgflags
或libprotobuf
失败可能是由于它是用较新gcc
版本编译的,但与所询问的问题无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句