저는 단일 IT 관리자가 감독하는 ~100명의 다른 사용자와 공유하는 CentOS6/RHEL6을 실행하는 컴퓨팅 클러스터에서 작업합니다.
최근에 저는 C++로 글을 쓰기 시작했는데, 제 코드 중 일부는 C++11에 의존하고 있습니다. 에 따르면이 웹페이지, C++11은 gcc
버전 4.8.1 이상에서 지원됩니다.
불행하게도 컴퓨팅 클러스터의 버전은 4.4.7입니다.
얼마 전, 다른 이유로 gcc
클러스터의 홈 디렉터리 아래 위치에 버전 4.8.4를 설치하려고 했습니다. 설치에 실패했습니다.이 오류 메시지. 일부 인터넷 검색을 통해 업데이트해야 한다고 생각하여 glibc
홈 디렉토리에 최신 버전을 설치하려고 했습니다. 저것극적으로 실패했다.
gcc
내 IT 관리자는 " 클러스터에서 버전을 수정하는 것은 아마도 작동하지 않을 것입니다."라고 결론지었습니다. 더 많은 질문으로 그녀를 괴롭히기 전에(이 시점에서 나는필요업데이트된 버전일부C 컴파일러), 나는 이것을 크라우드 소싱하고 있습니다:
(1) gcc
내 사용자 계정에 버전 4.8.1+을 설치하는 것이 가능합니까? (지난번에 이 작업을 시도한 후 어떤 사람들은 근본적으로 끔찍한 아이디어라고 말했습니다.)
(2) (1)에 대한 대답이 '예'라면 이번에는 설치가 성공했는지 확인하기 위해 어떤 예방 조치를 취해야 합니까? glibc
내 계정에 설치 해야 합니까? 그게 가능할까요?
gcc
(3) (1)에 대한 대답이 '아니요'인 경우 IT 관리자가 이미 존재하는 버전에 의존하는 코드를 중단하지 않고 시스템 전체 에 최신 버전을 설치할 수 있습니까 ?
(4) 위의 어느 것도 에 적합하지 않은 경우 gcc
다른 C 컴파일러에서는 상황이 바뀌나요?
요약하자면, 가능하다면 gcc
(권한 없는) 사람이 업그레이드하는 방법을 설명하기 위해 (또는 다른 C 컴파일러) 지식이 있는 사람을 찾고 있습니다 .sudo
답변1
Centos 6.7의 홈 디렉터리에 있는 소스에서 GCC 4.8.5를 빌드할 수 있었습니다. 저는 배포판 glibc를 사용하고 있습니다. 나는 glibc를 만들 필요가 없었습니다.
주의 사항: 배포판의 GCC 4.4.x 소스 패키지에 대한 빌드 종속성과 libmpc-devel
epel 저장소의 패키지가 설치된 시스템에서 이 작업을 수행하고 있습니다. 이것이 누락된 경우 먼저 소스에서 홈 디렉터리로 빌드하고 거기에서 사용할 수 있도록 gcc 빌드 프로세스를 변경해야 할 수도 있습니다(가능한 경우).
GCC 구축:
GCC 소스 가져오기
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
발췌
tar xf gcc-4.8.5.tar.bz2
GCC 소스 디렉터리 외부에 빌드 디렉터리를 만들고 해당 디렉터리로 이동합니다.
mkdir build && cd build
구성합니다. 나는 그랬다:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
짓다. 코어가 4개 있어서 다음과 같이 했습니다.
make -j 5
설치하다
make install
이제 일부 테스트 코드를 컴파일하고 실행할 수 있습니다.
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
답변2
귀하의 특정 질문과 관련하여:
(1) 네, 가능하지만 재미가 없을 수도 있습니다.
(2) 아니요. 일반적으로 시스템 glibc를 사용할 수 있습니다. gcc에서 등이 필요합니다 libstdc++
.libgcc
내 접근 방식은공식 지침 아주 가까이귀하의 플랫폼과 매우 잘 일치하는 경우에만 비공식 지침을 따르십시오.
나는 실제로 4.8에 신경 쓰지 않고 현재 릴리스 시리즈(5.2 또는 4.9) 중 하나로 바로 이동합니다.
참고: 저는 루트가 아닌 gcc 설치를 직접 수행하지는 않았지만 gnu 모듈로 다른 버전의 gcc를 유지 관리하는 시스템에서 작업합니다.