한국어

Lab

CC 및 GCC 컴파일러 설치와 환경 설정

2010.02.16 16:21

관리자 조회 수:276767

CC 및 GCC 컴파일러 설치와 환경 설정

GCC나 CC 컴파일러를 설치하면 "무조건 컴파일이 가능하다"는 생각을 가지신 분들이 많은 것 같습니다. 그러나 이것 또한 그렇지 않다는 것이 제 생각입니다만... 몇가지 추가적인 설정이 필요합니다.

1. GCC나 CC 컴파일러를 다운 받을 수 있는 곳

GCC : http://www.sunfreeware.com
CC : http://www.sun.com

우선 가장 대표적인 GCC나 CC의 경우, 컴파일러의 특징 상, 이미 컴파일된 패키지를 다운 받아서 설치하는 것을 정석으로 여기고 있습니다.(컴파일러 없이 소스만 받아서 컴파일러를 컴파일을?)

2. GCC, CC의 특징

그럼 "왜 GCC를 사용하는가? 그럼 CC는 무엇인가?" 라는 의문이 들 수도 있습니다.
GCC란 GNU CC 즉 자유롭게 배포가 가능한 소프트웨어이기 때문입니다. 그러니 "공짜"라는 개념이 있습니다. 이는 소프트웨어의 발전 상 상당히 장점으로 작용하고 있습니다. 그래서 사람들이 UNIX 상에서 프로그래밍을 할 때 표준적인 컴파일러로 인식하고 있습니다.

그럼 CC는 무엇인가? 그럼 솔라리스에서 # cc 라는 명령어를 쳐봅시다. 만약 설치가 않되어 있다면 "설치가 않되어 있습니다.." 라고 영어로 나옵니다. 즉 CC는 선에서 제공하는 소프트웨어로 쉐어웨어입니다. 60일의 사용기간이 정해져 있으며, 60일이 지난 경우 사용이 불가능하며, 돈 주고 사서 써야합니다. 이는 컴파일 시 상당히 문제가 될 수도 있습니다. (일반 유저에게는 돈 낭비일 수도 있습니다.) 그러나 가장 큰 특징이라면 솔라리스나 선에서 제공하는 소프트웨어를 개발한 컴파일러이기 때문에 상당히 안정적입니다.

그러면 CC가 더 좋은것이 아닌가? 라는 생각을 할 수 있습니다만.. 프로그램 소스의 필요한 부분이나 필수 적으로 필요한 함수를 대체 함수로 적절히 변환해 주는 소프트웨어가 있으니 걱정할 필요 없습니다. 이런 종류의 소프트웨어 이름은 automake, autoconf 입니다.

3. 설치

우선 GCC의 설치부터 다루겠습니다. http://www.sunfreeware.com에서 다운 받은 패키지일 경우 gcc-3.2.2-intel-local.gz 라는 파일이름 일 수 있습니다. 패키지를 만드는 사람의 마음에 따라 파일이름이 변하니 저 비슷한 류의 이름으로 되어있습니다. 확장자가 gz이므로 gzip 명령어를 통해 압축이 되어있는 파일입니다.
설치하는 순서를 보면
# ls
gcc-3.2.2-intel-local.gz

# gzip -d gcc-3.2.2-intel-local.gz

# ls
gcc-3.2.2-intel-local

# pkgadd -d gcc-3.2.2-intel-local

이와 같은 순서를 통해 파일을 설치할 수 있습니다.
gzip의 명령을 통해 압축을 풀 수 있습니다. 그러나 확장자를 통해 압축 파일을 풀 수 있는 명령어가 모두 다릅니다. 참고하시길 (.tar - tar 명령어, .Z - uncompress
bz2 - bzip2)

이와 같이 설치시 특별히 명령어를 지정해주지 않으면 /usr/local/ 이하 디렉토리에 파일이 설치됩니다. 각각의 면모를 살펴봅시다.

/usr/local/bin - 컴파일러에 필요한 실행 프로그램들이 설치되는 디렉토리, 이후 몇몇 프로그램들은 이곳에 실행 파일을 설치합니다.
/usr/local/lib - 컴파일러의 라이브러리. 이후 각각의 라이브러리들의 기본 설치 디렉토리로 사용됨
/usr/local/include - /usr/local/lib에 저장된 라이브러리들의 헤더(header 확장자 .h) 들이 설치되는 장소
/usr/local/man - /usr/local/bin에 설치된 명령어의 메뉴얼이 있을 경우 매뉴얼 설치 저장소
/usr/local/doc - /usr/local/bin에 설치된 명령어의 도큐먼트가 있을 경우 설치되는 저장소

매뉴얼이 무엇인가? 도큐먼트가 무엇인가? 라는 의문점이 있을 수 있습니다. 간단히 설명하면 매뉴얼은 어떤 명령어의 사용설명서라고 설명할 수 있으며, 도큐먼트의 경우 설치된 프로그램 전체의 설명서 같은 것입니다. 이는 거의 모든 프로그램의 설치 형식에 해당하는 설명입니다. 참고하시길 바랍니다.


그럼 선에서 다운 받은 CC의 설치를 다루겠습니다.
우선 솔라리스에 설치되어 있는 cc 프로그램을 삭제해야합니다.

# ls -al /usr/ucb/c*
cc
....
.......
# rm /usr/ucb/cc

설치되어 있는 cc의 경우 전혀 쓸모가 없는 단순히 컴파일러가 설치되지 않았습니다라는 말만 할 뿐인 소프트웨어입니다. 과감히 지웁니다.

선에서 다운로드할 경우 보통 6가지의 압축 파일이 존재합니다. (더 많을 수 있슴. 현재 SUN One Studio 8 compile 60 trial 일 경우 6개의 압축 파일로 구성되어 있습니다.

# ls
DEV_CC-i386-studiocc_8-JAFCS-soli386-a.tar
DEV_CC-i386-studiocc_8-JAFCS-soli386-b.tar
DEV_CC-i386-studiocc_8-JAFCS-soli386-c.tar
DEV_CC-i386-studiocc_8-JAFCS-soli386.tar
DEV_installer-studiocc_8-JAFCS-soli386.tar
DEV-SRC-studiocc_8-JAFCS-soli386-a.tar

이중 설치에 필요한 파일은 DEV_installer-studiocc_8-JAFCS-soli386.tar 파일입니다. java로 설치합니다.
# tar xvf DEV_installer-studiocc_8-JAFCS-soli386.tar
# ls
...
.....
installer
........

이와 같이 설치 명령어가 나타닙니다.
설치시
# installer & 와 같은 명령어를 실행해 주면 xwindow 상에서 자바용 설치 프로그램이 실행됩니다. 설치 프로그램이 실행되면 몇가지 옵션을 지정만 해주면 자동적으로 설치합니다.

이와 같이 컴파일러 설치는 완료 되었습니다.

팁 : gcc의 경우 왜 /usr/local/에 필요한 설치 프로그램 들이 설치되는가? 는 리눅스의 영향이 큽니다. 대중적으로 개인이 많이 쓰는 프로그램이 리눅스 입니다. 그러니 프로그램 형식도 리눅스의 표준을 따르는 것이 대세라는 생각이 듭니다. 리눅스의 경우 거의 모든 프로그램들은 /usr/local/ 상에 존재합니다. 그러니 솔라리스에서 컴파일 한 프로그램들의 경우도 특별한 옵션을 지정해 주지 않으면 /usr/local/에 설치됩니다. 우선 이런 이유는 리눅스에서 프로그래밍한 소프트웨어들을 솔라리스에서 컴파일 하여 쓰는 경우가 많으며, 프로그램들 대부분이 리눅스를 목표로 프로그램을 하기 때문입니다. 선-솔라리스에서 제공하는 소프트웨어일 경우 설치 디렉토리는 /opt, /usr/sfw로 잡고 있는 실정입니다.

그럼 컴파일러 설치 이후, 컴파일 할 때 모두 자동적으로 실행이 되나? 절대로 아님닙다.
몇가지 시스템적으로 설정해 줄 필요가 있습니다. 이는 유닉스에 프로그램을 설치시 모두 자동적으로 설정해주어야할 부분이지만, 컴파일러 또한 컴파일에 필요한 환경 설정을 필요로 합니다.
이런 환경을 보는 방법은
# env (bash 일 경우) 입니다.

신아영님의 Shell과 환경 설정의 글을 한번 읽어보셔서 참고하시면 많은 도움이 될겁니다.

우선 실행파일의 패스를 설정해 주어야합니다.

GCC의 경우

# PATH=/usr/local/bin <- 기본적으로 들어가야할 패스입니다.
# export PATH
참고로 컴파일시에는 몇가지 실행 명령어를 참고하는 경우가 많습니다. ar라던지.
등등의 명령어를 참고합니다. 그러니 패스를 추가해줍니다.

# PATH=/usr/local/bin:/usr/ucb:/usr/sbin:/usr/bin:/usr/ccs/bin
# export PATH
전 컴파일할 경우 위의 패스는 모두 넣는 편입니다. 더 추가해도 됩니다.

이제는 동적 라이브러리 패스를 설정할 때입니다. 컴파일시 몇몇의 동적 라이브러리를 필요로 하는 경우가 있습니다. 가장 대표적인 것이 libstdc++.so 등등입니다. 이라이브러리는 gcc의 라이브러리가 저장되어 있는 파일입니다. 만약 라이브러리 패스가 설정되어 있지 않을 경우 라이브러리를 찾을 수 없다는 영어로 된 에러 메시지를 찾을 수 있습니다.

# LD_LIBRARY_PATH=/usr/local/lib
# export LD_LIBRARY_PATH

라이브러리가 이리저리 분포되어 있으면 추가해줍니다.
예) LD_LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib 등등

CC의 경우

CC의 경우 설치 디렉토리는 /opt/SUNWpro 입니다.
패스 설정시 /opt/SUNWpro/bin 을 라이브러리 설정시 /opt/SUNWpro/lib를 추가해주면 됩니다.

참고로 http://www.sunfreeware.com에서 automake, autoconf, autohead, pkgconfig, make, libtool 패키지를 설치해 주는 것이 상당히 좋습니다. 컴파일에 따라 각각의 프로그램을 필요로 하는 경우가 상당히 많습니다. 이런 류의 패키지가 없어서 컴파일 시 ./configure 명령을 실행시 에러가 뜨는 경우가 상당히 많습니다.

참고로 컴파일시 에러 메시지는 상당히 유용한 정보입니다. 또한 중요한 정보이기도 합니다. 만약 pkgconfig 프로그램이 없어서 에러가 떴다. 그럴경우 pkgconfig 프로그램을 설치해줘야합니다. 그리고 libgtk.2.2.0.so 라이브러리 파일이 없다고 한다면 이러한 라이브러리 파일을 설치해줘야합니다. 또한 설치 디렉토리가 /usr/local/이므로 GCC파일 설치 패스와 중복됩니다. 그러니 따로 패스를 지정해 주지 않아도 됩니다.

팁으로 에러메시지 보는 방법입니다. 여러 에러메시지를 출력하는 방법이 다르지만
영어만 해독하실 수 있다면 에러를 제거하기 쉽습니다.

예 1)
ld.so.1: ./gen_lex_hash: fatal: libstdc++.so.5: open faild: No such file of directory
ld.so.1 파일은 동적 라이브러리를 처리하는데 필요한 라이브러리입니다. 이 파일을 통해 라이브러리가 가지는 함수 또는 사용 방법을 알아냅니다.
그런데 영어를 해석해봤듯이 ld.so.1 파일이 libstdc++.so.5 파일 열기에 실패했다고 나옵니다. 실패 원인 파일이 없다고 나오는 군요... 이 파일은 라이브러리입니다. 파일이 있다면 라이브러리 패스를 추가해주면 될 것이고 없다면 저 라이브러리를 설치해줘야 합니다.

예 2)
configure:6089:error:readline libarary not found
configure 시 에러가 뜬 경우 이군요 에러 코드 6089는 찾아보면 알겠지만 찾기 귀찮습니다. 그러나 에러에 대한 메시지가 나온는 군요 readline 라이브러리가 없다고 말입입니다. 설치해주면 되겠지요?

예 3)
configure:error: no acceptable C cmpiler found in $PATH
configure failed for srclib/apr
에러 메시지를 봅니다. configure 실행시 C 컴파일러가 패스에서 찾을 수 없다는 군요. C 컴파일러가 설치 않된걸까요?? 설치 않되어 있으면 컴파일러를 설치합니다. 만약 설치되어 있다면 env, printenv를 쳐서 환경 파일을 살펴봅니다. 컴파일러가 설치된 디렉토리를 패스에 추가해줬는지 찾아봐야겠군요..^^!

예 4)
#/usr/ccs/bin/make
make: Fatal error: No arguments to bulid
보통 configure 를 실행 후 만들어 지는 파일은 여러가지가 있지만 그 중 가장 중요한 파일은 Makein 파일입니다. 이 파일이 만들어져 있지 않으면 make명령이 실행되지 않습니다.

예 5)
# make
...
.....
.......
Making all in readline
rm -f libreadline.a
false cru libreadline.a readline.o funmap.o keymaps.o vi_mode.o parens.o rltty
.o complete.o bind.o isearch.o display.o signals.o util.o kill.o undo.o macro.
o input.o callback.o terminal.o xmalloc.o history.o histsearch.o histexpand.o
histfile.o nls.o search.o shell.o tilde.o
*** Error code 255
make: Fatal error: Command failed for target `libreadline.a'
Current working directory /export/home/root/mysql-4.0.18/readline
*** Error code 1
make: Fatal error: Command failed for target `all-recursive'
Current working directory /export/home/root/mysql-4.0.18
*** Error code 1
make: Fatal error: Command failed for target `all'
#

컴파일 중 all-recursive 어쩌고 저쩌고 나오면서 컴파일이 중지되는 경우가 있습니다. 이런 경우 make 버전이 낮기 때문입니다. 최신의 make 패키지를 설치하시면 됩니다.
설치했는데도 이런 에러가 뜬다면 패스 경로상 /usr/ccs/bin/make 보다 /usr/local/bin/make 의 경로가 뒤에 있기 때문입니다. 직접 패스까지 쳐서 실행하시거나. 패스의 경로를 /usr/local/bin 을 앞으로 옮기시면 됩니다.
번호 제목 글쓴이 날짜 조회 수
45 리눅스에서 배치파일 만들기 [3201] 민우 2010.09.03 376642
44 인코딩 디코딩 ? [1] [1536] 민우 2010.10.25 312567
43 리눅스에서 이클립스 키보드 먹통 [1] [4757] 민우 2010.03.08 297676
» CC 및 GCC 컴파일러 설치와 환경 설정 [2] [6906] 관리자 2010.02.16 276767
41 Visual Studio 2008 단축키 [2507] 민우 2010.09.03 219087
40 boost 관련 유용한 정보 블로그 [782] 민우 2010.10.28 126274
39 Eclipse Plug-in 개발을 위한 요구사항 [2560] 민우 2010.09.03 119503
38 Eclipse IDE 버전 별로 받는 페이지 [1] [3953] 민우 2010.02.18 119207
37 Automated Test Case Generation 정보가 있는 블로그 [논문 관련] [1] [3055] 민우 2010.02.18 109579
36 Prologue 언어 접해보기 [1] [1115] 관리자 2010.02.18 103618
35 itoa()함수 gcc에서 사용하기 [1] [946] 민우 2010.03.09 102940
34 Software Testing 기법 [1014] 관리자 2010.09.11 85211
33 open source 테스팅 관련 [1455] 관리자 2010.09.11 81235
32 무료 컴파일러 [1092] 민우 2010.09.03 51536
31 C++기초 문법 내용 블로그 [1092] 민우 2010.11.03 47109
30 Testing 용어 기본 개념 심기 [787] 관리자 2010.09.11 42992
29 프로그래밍 사이트 모음 [789] 민우 2010.09.03 42156
28 C++에 추가된 cast연산자들 [671] 민우 2010.03.10 33684
27 Eclipse Plug-in 다운받는 곳 [1] [318] 민우 2010.02.18 33132
26 리눅스에서의 라이브러리 [757] 민우 2010.09.03 31611