ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • gcc 빌드 및 설치 방법
    Linux 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.



    그럼 이만~

    반응형

    댓글

Designed by Tistory.