Linux

gcc 빌드 및 설치 방법

hun.a 2016. 3. 31. 17:35
반응형


예전에 수석님이 gcc 5.3.0 을 설치해 보라고 해서

뭔지도 모르고 설치를 해본 적이 있었다.

rpm이나 tar로 배포되는게 있겠지~ 했는데

최신 버전이었나? 그래서 소스코드로 빌드해야 한다고 했었다.


근데 gcc 요놈은 빌드가 상당히 까다로웠던 것 같다.

필요한 라이브러리들이 꽤 많고

make, make install 하는 시간도 굉장히 길었었다.


여기까지는 과거 이야기.




오늘은 centos 6.7을 minimal로 설치 후 회사 제품을 빌드해볼 기회가 생겼다.

신나게 빌드 하는데 몇 몇 패키지가 없어서 에러가 났다.

libtool이 없어서 yum을 이용해서 걍 깔았다.

gcc도 yum으로 깔았다.

그리고 다시 빌드를 하는데...

libtool 버전이 너무 낮다며 2.4.2 이상을 설치해야 한다고 에러를 토해냈다.

centos 6.7에서 yum으로 찾아봐도 libtool은 2.2.2인가 구닥다리 버전이 최신으로 등록되어 있었다.


구글님과 Q&A 시간이다.

"libtool 2.4.2 download" 로 문의했다.

libtool 2.4.2 rpm설치 파일을 찾았다.

다운받았다.

설치를 시도했다.

$ sudo rpm -ivh libtool-2.4.2*


ㅋㅋㅋㅋㅋㅋ

gcc 버전이 4.8.2 이상이 필요하다고 또!!!! 왜 또!!! 에러를 토해낸다.

거지같다.


또 다시 구글님과 Q&A 시간을 갖았다.

"gcc-4.8.2를 주세요"

하려다가 

에이 이렇게 된거 그냥 빌드해서 최신 버전으로 가자! 

라고 결정해서!!

빌드를 시작했다.



준비물 : gcc-5.3.0 소스 파일, 그 외 없음


일단 필요한 패키지들을 설치할 시간이다.

내가 뭘 어떻게 설치했었지...

떠올려라 떠올려라... 


할 시간에 구글님께 또 문의했는데...

어마어마한 팁을 알려주셨다.


일단 소스코드 루트 폴더로 들어가보자. (내 경우 소스코드 루트 디렉토리는 gcc-5.3.0 이다)

$ cd gcc-5.3.0


들어가면 굉장한 팁을 품은 디렉토리가 하나 있다.

보이는가?

들어가보자.

$ cd contrib


굉장한 팁을 눈치 챘는가? 못 챘다면 당연한거다.

바로 다음 파일을 열어보자.

$ vi download_prerequisites


여기에는 친절하게도 gcc 빌드 전 다른 패키지들을 따로 번거롭게 귀찮게 힘들고 짜증나게 설치할 필요 없게

친절하게도 모두 다운 받을 수 있도록 

스크립트로 제공 되어 있다.

이걸 몰라서 그렇게 삽질을 했었다니!!!!


해당 패키지들은 산술 관련 라이브러리들이다.

패키지 설명은 본 포스팅의 주제를 벗어나므로 더 이상의 설명은 생략한다.

하지만 내가 나중에 보기 위해 링크를 남겨두겠다.

(mpfr, gmp, mpc, isl)



해당 스크립트는  gcc-5.3.0 즉, gcc 루트 디렉토리에서 실행해야 된다.

안그럼 아래와 같은 에러를 토해내며 스크립트가 끝난다. 놀라지 말기 바란다.

"너 이놈! 이 스크립트를 GCC 최고 레벨에서 돌리란 말이야!!!"


다시, gcc-5.3.0 루트 디렉토리에서 패키지들을 설치해주자.

$ ./contrib/download_prerequisites

간단하게 설치된다.


빌드를 하기 전에

configure 파일을 만들어 보자. 난 c, c++ 모두 필요하다.

$ ./configure --prefix=/usr/local/gcc-5.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib


그럼 이제 make를 실행해보자.

$ make


아니면 내 컴퓨터는 성능이 너무 빵빵해서 더 빠르게 빌드 할꺼야!

라고 생각이 든다면

다음과 같이 빌드를 해보자.

$ make -j <CPU core 수> 

자세한 내용은 링크에서 참고했으니 들어가서 보시기 바란다.


아무튼 빌드를 시작하면 굉장한 인내심을 필요로 한다.

걍 켜놓고 어디 1~2시간 놀다오면 필요 없지만.


또한,!!!!

빌드 중간에 생성되는 파일들이

어마어마한 사이즈를 자랑한다.

만약 디스크 공간이 쥐똥만하다면

디스크 풀을 발생시키며

빌드가 실패할 수 있으니

조심하기 바란다.

(내가 그랬다.. 제길)


또한!!!

신기하게도 

빌드를 하다가

이상한 에러를 토해내면서 빌드가 실패할 수 있다.

대략 이런 에러였다.

configure: error: error verifying int64_t uses long long
make[2]: *** [configure-stage1-gcc] Error 1
make[2]: Leaving directory `/home/sjarvis/dev/gcc/srcdir'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/sjarvis/dev/gcc/srcdir'
make: *** [all] Error 2


뭐야 이게!!

롱롱이라니!!!

이럴 경우 침착하게 다음 명령어를 날린 후 make를 해보자.

$ sudo yum install -y gcc-c++ 

컴파일러 설치하는데 c++ 컴파일러가 필요하다니?!!!



빌드가 에러 없이 잘 끝났다면

설치를 해보기 바란다.

$ make install


또 어디 가서 1 ~ 2시간 놀다오면 된다.


아무런 탈도 없고 에러도 없이 설치가 끝났다면

확인을 한번 해보자.

나 말고 누구 하나 믿을 사람 없으니 말이다.

$ gcc --version


이쁘게 5.3.0이란 글자가 아래와 같이 찍히면 빌드 및 설치가 끝난 것이다.

(사실 VM에 설치중이라 겁나 느려서 결과까진 못봤으나 에러가 나거나 뭔가 발견한다면 추가적인 포스팅을 하겠다)


----- 추가 내용 -----

configure 할 때 prefix=/usr/local/gcc-5.3.0 으로 잡았으니

gcc 파일들이 /usr/local/gcc-5.3.0에 설치가 됬을 것이다.

그렇다면~~~!!!!

위의 gcc --version하면 아예 안뜨거나

옜날 버전이 나오는게 당연할 것이다.

(미안합니다 ㅎ)


그럼 이제 설치된 gcc 5.3.0을 환경변수로 잡아주자.

profile 파일을 열어서

$ sudo vi /etc/profile


아래 내용을 추가 해보자.

export GCC=/usr/local/gcc-5.3.0
export C_INCLUDE_PATH=$GCC/include/c++/5.3.0/
export CPLUS_INCLUDE_PATH=$GCC/include/c++/5.3.0/
export LD_LIBRARY_PATH=$GCC/lib64:$PPL/lib:$LD_LIBRARY_PATH
export PATH=$GCC/bin:$PATH


자... 드디어... 버전을.. 버전을 확인해보자... 하앍 하앍

$ gcc --version
gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



그럼 이만~

반응형