xenial repositorio para paquetes paquete gcc cuda g++ caffe nvcc

repositorio - La compilación de Caffe falla debido a una versión de compilador de gcc no compatible



ubuntu packages xenial (2)

cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.8" .. && make provoca una compilación exitosa .

Ahora apareció otro problema: la unión de libgflags o libprotobuf falla probablemente debido a que se compiló con la versión más nueva de gcc , pero no está relacionada con la pregunta formulada.

Lucho con la compilación de Caffe . Lamentablemente no pude compilarlo.

Pasos que seguí:

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

Ejecutando make all falla con el siguiente mensaje de error:

[ 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

Versión del software:

  • OS: Debian .
  • versión gcc : 5.3.1 .
  • versión nvcc : 6.5.12 .
  • Resultado de 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)

Intenta resolver el problema

Primer intento

Las soluciones simples suelen ser las mejores, así que (como se sugiere aquí ) intenté comentar la macro comprobación de la versión de gcc de /usr/include/host_config.h (línea 82). Desafortunadamente no funciona y la compilación falla mal:

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

2do intento

Intenté correr:

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

pero falla exactamente con el mismo mensaje de error (aunque se debe aceptar g++-4.8 ).

3er intento

He encontrado un problema similar (aunque no relacionado con Caffe ) y traté de resolverlo como se sugiere en la respuesta aceptada.

Lo que hice:

  1. He ejecutado grep -iR "find_package(CUDA" caffe command) y encontré el archivo Cuda.cmake que tiene find_package(CUDA 5.5 QUIET) en la línea 225 .
  2. set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8) a Cuda.cmake , línea antes de la línea: find_package(CUDA 5.5 QUIET) .
  3. cmake todo del directorio de build y ejecuté cmake y cmake nuevo - con y sin -D CMAKE_CXX_COMPILER=g++-4.8 .

Lamentablemente, el resultado es exactamente el mismo. Caffe probablemente lo sobrescribe de alguna manera, no me di cuenta cómo .

make VERBOSE=1 2>&1 | grep -i compiler-bindir make VERBOSE=1 2>&1 | grep -i compiler-bindir no devuelve nada.

Lo que es interesante, make VERBOSE=1 imprime el comando que falla, que es:

/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

cuando agrego el --compiler-bindir /usr/bin/gcc-4.8 manualmente, se imprime el error:

nvcc fatal : redefinition of argument ''compiler-bindir''

que puede estar relacionado con este informe de error.

Editar: No noté que --compiler-bindir y -ccbin son las mismas opciones, y este último ya está configurado en el comando anterior que falló. Cuando cambié -ccbin /usr/bin/cc a -ccbin /usr/bin/gcc-4.8 en el comando anterior que falló, se completa con éxito. Ahora necesito encontrar una opción en el archivo CMake de Caffe que sobrescriba -ccbin en todos los CMakes posteriores de Caffe. Mirando cmake/Cuda.cmake:252:list(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA} parece ser un buen camino a seguir.

¿Cómo puedo completar mi compilación? Cualquier ayuda es apreciada.

Preguntas SO relacionadas:


Mi máquina ejecuta Ubuntu 15.10, y mi versión de compilador predeterminada es gcc 5.2.1.

Comentando la directiva #error en la línea 115 del archivo

/usr/local/cuda-7.5/include/host_config.h

(o cualquiera que sea el camino en su sistema) me hizo el truco. Caffe compiló bien, todas las pruebas funcionaron sin problemas.

Por otro lado, si uno elige ignorar esto y proceder a compilar parte del proyecto con una versión del compilador, parte del proyecto con otra (para mí fue gcc-4.8 y gcc-5.2.1), surgirán problemas de vinculación. . Los problemas de vinculación de protobuf y libgflags que otras menciones de respuesta no están relacionadas con esto.