CUDA가 내 gcc 버전과 호환되지 않습니다.


102

CUDA SDK와 함께 제공되는 일부 예제를 컴파일하는 데 문제가 있습니다. 개발자 드라이버 (버전 270.41.19)와 CUDA 툴킷을 설치 한 다음 마지막으로 SDK (모두 4.0.17 버전)를 설치했습니다.

처음에는 전혀 컴파일되지 않았습니다.

error -- unsupported GNU version! gcc 4.5 and up are not supported!

81 : /usr/local/cuda/include/host_config.h에서 담당하는 줄을 발견하고 다음과 같이 변경했습니다.

//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)

그 시점부터 컴파일 할 예제 중 몇 개만 얻었으며 다음과 같이 중지됩니다.

In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0,
             from /usr/include/c++/4.6/ext/atomicity.h:34,
             from /usr/include/c++/4.6/bits/ios_base.h:41,
             from /usr/include/c++/4.6/ios:43,
             from /usr/include/c++/4.6/ostream:40,
             from /usr/include/c++/4.6/iterator:64,
             from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38,
             from /usr/local/cuda/include/thrust/device_ptr.h:26,
             from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27,
             from /usr/local/cuda/include/thrust/device_vector.h:26,
             from lineOfSight.cu:37:
/usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting         "__gthrw_" and "/* Android's C library does not provide pthread_cancel, check for
`pthread_create' instead.  */" does not give a valid preprocessing token
make[1]: *** [obj/x86_64/release/lineOfSight.cu.o] Error 1

일부 예제가 컴파일되면 이것이 드라이버 문제가 아니라 지원되지 않는 gcc 버전과 관련이 있다고 생각합니다. gcc4.6은이 시점에서 전체 시스템을 종속성으로 사용하므로 다운 그레이드는 옵션이 아닙니다.


4
미래의 독자 : CUDA의 최신 버전을 사용하고 있는지 확인하십시오 (초기 버전을 반드시 사용해야하는 경우 제외). NVIDIA는 거의 모든 릴리스에서 지원되는 최대 컴파일러 버전을 올립니다.
einpoklum 2015-08-03

이 CUDA 10 사람들을 위해 도움이 될 수 있고 너무 높은 GNU 컴파일러 체인 버전 a의 오류가 : stackoverflow.com/questions/53344283/...
더글러스 Daseeco

답변:


114

이미 지적했듯이 nvcc는 gcc 4.4에 의존합니다. nvcc 설치로 생성 된 bin 디렉토리에 소프트 링크를 추가하여 컴파일러 매개 변수를 전달하지 않고도 올바른 버전의 gcc를 사용하도록 nvcc를 구성 할 수 있습니다.

기본 cuda 바이너리 디렉토리 (설치 기본값)는 / usr / local / cuda / bin이며,이 디렉토리에서 올바른 gcc 버전에 대한 소프트 링크를 추가하는 것으로 충분합니다.

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc


2
"update-alternatives"명령도 도움이 될 수 있습니다. 특히 CUDA 5.0을 설치할 때 도움이 될 수 있습니다
phoad

4
또한 올바른 버전의 g ++에 대한 심볼릭 링크를 추가해야했습니다.
Auron 2013 년

17
또한 g ++에 연결해야했습니다. 그렇지 않으면 간단한 nvcc호출이 작동하지만 makeCUDA 샘플에 적용 하면 곧 다음으로 시작하는 호출이 시작됩니다 nvcc -ccbin g++. 나를 위해 나는 sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gccsudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++.
user2023370 dec.

8
로 컴파일하면 cmake .. && make다음을 수행 할 수 있습니다 시도 cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make . 일반을 사용하는 경우 시도해 볼Makefile 수 있습니다 . make CXX=g++-4.4 CC=gcc-4.4
patryk.beza

1
이 명령을 시도하면 "파일이 있습니다."라는 메시지가 표시되고 링크를 수행하지 않습니다. 도움이 필요하세요?
Sentient07 2016 년

59

gcc 4.5 및 4.6은 CUDA에서 지원되지 않습니다. 코드가 컴파일되지 않고 cuda-gdb를 포함한 나머지 도구 모음이 제대로 작동하지 않습니다. 사용할 수 없으며 제한 사항은 협상 할 수 없습니다.

유일한 해결책은 gcc 4.4 버전을 두 번째 컴파일러 로 설치하는 것입니다 (대부분의 배포판에서는이를 허용합니다). --compiler-bindir대체 컴파일러를 가리키는 데 사용할 수있는 nvcc에 대한 옵션 이 있습니다. 로컬 디렉토리를 만든 다음 지원되는 gcc 버전 실행 파일에 대한 심볼릭 링크를 만듭니다. --compiler-bindir옵션을 통해 해당 로컬 디렉토리를 nvcc로 전달 하면 나머지 시스템에 영향을주지 않고 CUDA 코드를 컴파일 할 수 있습니다.


수정 :

이 질문과 답변은 CUDA 4와 관련이 있습니다.

작성된 이후 NVIDIA는 최신 CUDA 툴체인 릴리스에서 최신 gcc 버전에 대한 지원을 계속 확장했습니다.

  • CUDA 4.1 릴리스부터 gcc 4.5가 지원됩니다. gcc 4.6 및 4.7은 지원되지 않습니다.
  • CUDA 5.0 릴리스부터 gcc 4.6이 지원됩니다. gcc 4.7은 지원되지 않습니다.
  • CUDA 6.0 릴리스부터 gcc 4.7이 지원됩니다.
  • CUDA 7.0 릴리스부터 gcc 4.8은 Ubuntu 14.04 및 Fedora 21에서 4.9 지원과 함께 완전히 지원됩니다.
  • CUDA 7.5 릴리스부터 gcc 4.8이 완전히 지원되며 Ubuntu 14.04 및 Fedora 21에서 4.9를 지원합니다.
  • CUDA 8 릴리스부터 gcc 5.3은 Ubuntu 16.06 및 Fedora 23에서 완전히 지원됩니다.
  • CUDA 9 릴리스부터 gcc 6은 Ubuntu 16.04, Ubuntu 17.04 및 Fedora 25에서 완벽하게 지원됩니다.
  • CUDA 9.2 릴리스는 gcc 7에 대한 지원을 추가합니다.
  • CUDA 10.1 릴리스는 gcc 8에 대한 지원을 추가합니다.

현재 (CUDA 10.1 기준) CUDA에는 gcc 9 지원이 없습니다.

NVIDIA는 최근 CUDA 릴리스에 대해 지원되는 컴파일러 및 OS 매트릭스가 포함 된 매우 유용한 표를 여기 에 추가했습니다 .


CUDA 7.5에 무엇이 사용되는지 아십니까?
GuySoft

2
gcc 4.9.3SLES 11 SP3에서 문제없이 CUDA 7.5를 사용 합니다.
피터 바르

3
뭐? 코드가 더 높은 버전으로 컴파일되지 않아야하는 이유 무엇입니까 ( 물론 하드 코딩 된 제한 사항 제외) ? 내가 생각할 수있는 유일한 것은 일부 버전이 C11 / C ++ 11이 기본적으로 활성화되어 있기 때문에 이전 코드에 문제를 일으키는 경우 명령 줄 스위치로 쉽게 해결할 수 있다는 것입니다.
Hi-Angel

2
두 번째 @ Hi-Angel. #talonmies "제한은 협상 할 수 없습니다"는 무슨 뜻인가요? 최신 버전의 gcc 및 gdb는 "항상"(일종의) 개체 파일에 대해 이전 바이너리 헤더를 지원하므로 최신 gcc 버전이 작동하지 않을 이유가 없습니다. Symlinking 솔루션은 제쳐두고, 다른 문제는 대부분 ac 전 처리기 버전 플래그 설정일 가능성이 높습니다. gcc 버전 테스트가 정의 또는 매크로의 일부로 일부 cuda 헤더에 "하드 코딩"되어 있으면 쉽게 수정할 수 있습니다. 예외는 cuda gpu 컴파일러 자체 일 수 있습니다.
Beracah

1
이것은 바이너리 호환성 질문이 아닙니다. CUDA 툴체인은 nvcc 및 GPU 프런트 엔드 파서가 호스트 및 장치 코드를 컴파일하고 함께 통합하기 위해 다양한 컴파일러 및 libc / libc ++ 내부 헤더를 가로 채고 오버로드 할 수 있어야합니다. CUDA 파서는 무엇보다도 gcc 내부 헤더를 올바르게 구문 분석 할 수 있어야합니다. 테스트되지 않은 gcc 버전은 NVIDIA 헤더에 내장 된 전 처리기 가드와 관계없이 실패 할 수 있습니다. 나를 믿거 나 (거의 10 년 동안 CUDA 툴체인을 해킹해온 사람으로서) 믿지 않을 수도 있습니다. 이 시점에서 나는 정말로
talonmies

57
  1. CUDA 버전에 대해 지원되는 최대 GCC 버전을 확인하십시오.

     | CUDA version | max supported GCC version |
     |--------------|---------------------------|
     |      11      |             9             |
     |  10.1, 10.2  |             8             |
     |   9.2, 10.0  |             7             |
     |   9.0, 9.1   |             6             |
     |       8      |            5.3            |
     |       7      |            4.9            |
     |    5.5, 6    |            4.8            |
     |    4.2, 5    |            4.6            |
     |      4.1     |            4.5            |
     |      4.0     |            4.4            |
    
  2. 해당 GCC 버전에 대한 환경 변수를 설정합니다. 예를 들어 CUDA 10.2의 경우 :

     MAX_GCC_VERSION=8
  3. 해당 버전이 설치되어 있는지 확인하십시오.

     sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION
  4. CUDA 폴더 내에 심볼릭 링크 추가 :

     sudo ln -s /usr/bin/gcc-$MAX_GCC_VERSION /usr/local/cuda/bin/gcc 
     sudo ln -s /usr/bin/g++-$MAX_GCC_VERSION /usr/local/cuda/bin/g++
    

    (또는 /usr/local/cudaCUDA 설치 경로가없는 경우 대체 )

CUDA-GCC 호환성 표에 대한 자세한 내용은이 GitHub 요점을 참조하세요 .


3
내 인생 롤 구성 악몽을 구했습니다 !!!! 감사합니다. 나는 이것을 gcc 및 g ++ 7 시스템 링크로 cuda 10에 적용했습니다. 이 문제를 접하는 사람을 위해.
thekevshow

/usr/bin/gcc/usr/bin/g++또는 /usr/local/cuda/bin/gcc폴더를 직접 만들어야 합니까?
Josh Desmond

@JoshDesmond 귀하가 언급 한 파일의 심볼릭 링크는 4 단계에서 생성됩니다.
bryant1410

@ bryant1410 4 단계에서 명령을 실행했을 때 "오류 : 디렉토리 / usr / local / cuda / bin / gcc가 존재하지 않습니다. 중단 중입니다."라는 오류 메시지가 표시되는 것을 기억합니다. 나는 (질문의 세부 사항을 읽은 후) 귀하의 답변이 OP에서 언급 한 단계 0을 가정한다는 것을 깨달았습니다. "나는 CUDA 툴킷을 설치 한 다음 마지막으로 SDK를 설치했습니다". 나는 cuda_10.2.89_440.33.01_linux.rungcc 호환성에 대한 불만으로 런타임에 단순히 실패한 NVIDIA의 마법사로 설치하려고 했습니다. gcc 9 : P
Josh Desmond

1
당신과 함께 NVCC를 설치 한 경우 [아나 | 미니] CONDA (CONDA - 단조 패키지 cudatoolkit-dev), 다음이 같은 ENV 내부 링크를 필요로 ln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gcc하고ln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
디에고 페라이트

25

Gearoid Murphy의 솔루션은 내 배포판 (Ubuntu 11.10)에서 gcc-4.4 및 gcc-4.6이 동일한 디렉토리에 있으므로 --compiler-bindir은 도움이되지 않기 때문에 더 잘 작동합니다. 유일한주의 사항은 g ++-4.4를 설치하고 심볼릭 링크도해야한다는 것입니다.

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++

11

CUDA7.5의 경우 다음 라인이 작동합니다.

sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc 
sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++

9

이 문제를 해결 하려면 "update-alternatives"를 사용하는 방법을 확인하십시오 .

... gcc 4.6을 설치하면 update-alternatives 명령을 사용하여 버전간에 쉽게 전환 할 수 있습니다. 다음과 같이 구성 할 수 있습니다.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --config gcc

6

cmake나를 위해 사용 하는 경우 파일 편집 및 링크의 해킹이 작동하지 않았으므로 gcc / g ++ 버전을 지정하는 플래그를 사용하여 컴파일했습니다.
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..

매력처럼 작동했습니다.


haha 나는이 스레드에 넣어야한다고 생각했기 때문에 여기에 다른 질문의 답변을 연결하려고했습니다. 다시 수고하셨습니다! 감사합니다
MikeDoho

하나는 중복 답변을 게시하지 않아야하지만 옵션이 없었습니다. :)
markroxor

5

대부분의 배포판에서 gcc-4.7과 같은 최신 컴파일러 옆에 다른 gcc 및 g ++ 버전을 설치할 수 있습니다. 또한 대부분의 빌드 시스템은 다른 C 및 C ++ 컴파일러를 각각 지정할 수 있는 CCCXX환경 변수를 인식합니다 . 그래서 다음과 같은 것을 제안합니다.

CC=gcc-4.4 CXX=g++-4.4 cmake path/to/your/CMakeLists.txt

Makefile의 경우 비슷한 방법이 있어야합니다. 수행중인 작업을 알지 못하는 경우 / usr / local 내에 사용자 정의 심볼릭 링크를 설정하지 않는 것이 좋습니다.


3

이것은 fedora 23에서 작동합니다. compat gcc 리포지토리는 fedora 버전에 따라 약간 다릅니다.

다음 저장소를 설치하는 경우 :

sudo yum install compat-gcc-34-c++-3.4.6-37.fc23.x86_64 compat-gcc-34-3.4.6-37.fc23.x86_64 

이제 cuda bin 폴더가 있다고 가정하고 위에서 언급 한대로 소프트 링크를 만듭니다. /usr/local/cuda/

sudo ln -s /usr/bin/gcc-34 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-34 /usr/local/cuda/bin/g++

이제 nvccgcc 버전 오류없이 컴파일 할 수 있습니다 .


2

Gearoid Murphy의 솔루션은 매력처럼 작동합니다. 나에게는 cuda에 대한 두 개의 디렉토리가 있습니다.

/usr/local/cuda 
/usr/local/cuda-5.0

소프트 링크는 아래에 언급 된 디렉토리에만 추가해야합니다.

/usr/local/cuda 

또한 SchighSchagh에서 언급 한대로 g ++ 및 gcc 소프트 링크가 모두 필요했습니다.


2

특정 버전의 gcc (예 : gcc-4.4)를 사용하도록 nvcc를 구성하는 또 다른 방법은 nvcc.profile 을 편집 하고 PATH 를 변경 하여 먼저 사용하려는 gcc에 대한 경로를 포함하는 것입니다.

예 : (/ opt에 설치된 gcc-4.4.6) :

PATH += /opt/gcc-4.4.6/lib/gcc/x86_64-unknown-linux-gnu/4.4.6:/opt/gcc-4.4.6/bin:$(TOP)/open64/bin:$(TOP)/share/cuda/nvvm:$(_HERE_):

nvcc.profile 의 위치는 다양하지만 nvcc 실행 파일 자체 와 동일한 디렉토리에 있어야 합니다.

nvcc.profile 은 nvcc 매뉴얼에 따라 사용자 구성을위한 것이 아니기 때문에 이것은 약간의 해킹입니다 . 그러나 그것은 저에게 가장 잘 작동하는 솔루션이었습니다.


이 작업을 수행하는 것이 좋지만 올바른 gcc 버전에 심볼릭 링크 된 g ++가있는 디렉토리의 경로를 가리 킵니다 (특히 배포판이 지원되는 gcc 버전을 제공하는 경우 유용함). 예 :mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
Sami Liedes


2

사용하는 동안 혼란을 얻을 나 같은 사람들 cmakeFindCUDA.cmake스크립트에서 물건의 일부를 우선합니다 nvcc.profile. http://public.kitware.com/Bug/view.php?id=13674에 따라 nvcc설정 하여 호스트 컴파일러를 지정할 수 있습니다 .CUDA_HOST_COMPILER


cmake .. -DCMAKE_INSTALL_PREFIX=/InstallPos_GPU/ -DCMAKE_C_COMPILER="/gcc-8.3.0/bin/gcc" -DCMAKE_CXX_COMPILER="/gcc-8.3.0/bin/g++" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cuda-7.5/ -D NVCCFLAGS=" -ccbin /cuda-7.5/bin/" -DCUDA_HOST_COMPILER=/cuda-7.5/bin/gccGPU를 지원하는 gromacs를 성공적으로 설치했습니다.
pengchy

2

이전 버전의 gcc, g ++를 설치해야했습니다.

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4

gcc-4.4가 / usr / bin /에 있고 g ++에 대해 동일한 지 확인한 다음 위의 솔루션을 사용할 수 있습니다.

    sudo ln -s /usr/bin/gcc-4.4 /opt/cuda/bin/gcc
    sudo ln -s /usr/bin/g++-4.4 /opt/cuda/bin/g++

이 명령을 시도하면 "파일이 있습니다."라고 표시되고 링크를 수행하지 않습니다. 도움이 필요하세요?
Sentient07 2016 년

나는 이것에 대해 생각하는 것에서 너무 멀리 떨어져서 무엇을 말 해야할지 알지 못합니다. 다른 사람들이 도울 수 있기를 바랍니다.
travellingbones

2

에서 $CUDA_HOME/include/host_config.h다음과 같은 줄을 찾습니다 (CUDA 버전에 따라 약간 다를 수 있음).

//...
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)

#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

#endif [> __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9) <]
//...

조건에 맞게 제거하거나 변경하십시오.

이 방법은 잠재적으로 안전하지 않으며 빌드가 손상 될 수 있습니다. 예를 들어 gcc 5는 C ++ 11을 기본으로 사용하지만 CUDA 7.5부터는 nvcc의 경우가 아닙니다. 해결 방법은 다음을 추가하는 것입니다.

--Xcompiler="--std=c++98" CUDA <= 6.5의 경우

또는

--std=c++11 CUDA> = 7.0.


--std=c++옵션을 어디에 추가 합니까?
asgs dec. 05 dec. 172017-12-05

1

이 오류가 발생하면 로그 파일을 읽으십시오.

$ cat /var/log/cuda-installer.log 
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc

[INFO]: gcc version: gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2) 

[ERROR]: unsupported compiler version: 9.2.1. Use --override to override this check.

로그 파일의 제안을 따르십시오.

sudo sh cuda_<version>_linux.run --override

완료 :)

방금 --override옵션을 사용하여 Kubuntu 19.10에 gcc 9.2와 함께 CUDA 10.2를 설치했습니다 .


0

Ubuntu 16.10에서 CUDA 8.0 예제를 컴파일하기 위해 다음을 수행했습니다.

sudo apt-get install gcc-5 g++-5
cd /path/to/NVIDIA_CUDA-8.0_Samples
# Find the path to the library (this should be in NVIDIA's Makefiles)
LIBLOC=`find /usr/lib -name "libnvcuvid.so.*" | head -n1 | perl -pe 's[/usr/lib/(nvidia-\d+)/.*][$1]'`
# Substitute that path into the makefiles for the hard-coded, incorrect one
find . -name "*.mk" | xargs perl -pi -e "s/nvidia-\d+/$LIBLOC/g"
# Make using the supported compiler
HOST_COMPILER=g++-5 make

이것은 전체 시스템을 수정하지 않거나 바이너리에만 심볼릭 링크를 만드는 장점이 있습니다 (라이브러리 연결 문제를 일으킬 수 있음).


0

이것은 내 문제를 해결했습니다.

sudo rm /usr/local/cuda/bin/gcc
sudo rm /usr/local/cuda/bin/g++
sudo apt install gcc-4.4 g++-4.4
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++

0

CUDA 6.5 (그리고 분명히 7.0 및 7.5)의 경우, 해당 버전의 gcc를 시스템의 현재 GCC와 함께 설치할 수 있도록하는 gcc 4.8.5 RPM 패키지 (Fedora Core 30 아래) 버전을 만들었습니다.

여기에서 모든 정보를 찾을 수 있습니다 .


0

제 경우에는 Ubuntu 버전에서 CUDA를 이미 설치했으며 cmake는 NVidia SDK Manager를 사용하여 새로 설치된 버전 대신 CUDA를 감지합니다.

나는 달렸고 dpkg -l | grep cuda두 버전을 모두 볼 수 있었다.

내가해야 할 일은 이전 CUDA (제 경우에는 버전 9.1)를 제거하고 새 버전은 그대로 둡니다 (버전 10.2). 다음과 같이 제거 명령을 사용했습니다.

sudo apt-get purge libcudart9.1 nvidia-cuda-dev nvidia-cuda-doc \
                                nvidia-cuda-gdb nvidia-cuda-toolkit

패키지 이름이 설치에서 제거하려는 버전과 일치하는지 확인하십시오.

모든 및 라이브러리를 SDK 버전 으로 리디렉션하려면 cmakeBUILD디렉터리 에서 다시 실행해야했습니다 #include(이전 경로는 기존 빌드 환경에서 구워 졌기 때문).


-1

이는 현재 CUDA 버전이 현재 GCC 버전을 지원하지 않기 때문에 발생합니다. 다음을 수행해야합니다.

  1. 지원되는 GCC 버전 찾기 (제 경우에는 CUDA 9의 경우 5)

    • CUDA 4.1 : GCC 4.5
    • CUDA 5.0 : GCC 4.6
    • CUDA 6.0 : GCC 4.7
    • CUDA 7.0 : GCC 4.8
    • CUDA 7.5 : GCC 4.8
    • CUDA 8 : GCC 5.3
    • CUDA 9 : GCC 5.5
    • CUDA 9.2 : GCC 7
    • CUDA 10.1 : GCC 8
  2. 지원되는 GCC 버전 설치

    sudo apt-get install gcc-5
    sudo apt-get install g++-5
  3. /usr/bin디렉토리 에서 GCC에 대한 소프트 링크 변경

    cd /usr/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
  4. /usr/local/cuda-9.0/bin디렉토리 에서 GCC에 대한 소프트 링크 변경

    cd /usr/local/cuda-9.0/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
  5. 추가 -DCUDA_HOST_COMPILER=/usr/bin/gcc-5사용자에게 setup.py편집에 사용되는 파일,

    if torch.cuda.is_available() and CUDA_HOME is not None:
        extension = CUDAExtension
        sources += source_cuda
        define_macros += [("WITH_CUDA", None)]
        extra_compile_args["nvcc"] = [
            "-DCUDA_HAS_FP16=1",
            "-D__CUDA_NO_HALF_OPERATORS__",
            "-D__CUDA_NO_HALF_CONVERSIONS__",
            "-D__CUDA_NO_HALF2_OPERATORS__",
            "-DCUDA_HOST_COMPILER=/usr/bin/gcc-5"
        ]
  6. 이전 빌드 디렉토리 제거

    rm -rd build/
  7. 설정하여 다시 컴파일 CUDAHOSTCXX=/usr/bin/gcc-5

    CUDAHOSTCXX=/usr/bin/gcc-5 python setup.py build develop

참고 : gcc: error trying to exec 'cc1plus': execvp: no such file or directory이 단계를 수행 한 후에도 오류가 계속 발생 하면 다음과 같이 GCC를 다시 설치 한 다음 다시 컴파일하십시오.

sudo apt-get install --reinstall gcc-5
sudo apt-get install --reinstall g++-5

크레딧 : https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.