본문 바로가기

UNIX_LINUX_C_C++

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

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란GNUCC즉자유롭게배포가가능한소프트웨어이기때문입니다.그러니"공짜"라는개념이있습니다.이는소프트웨어의발전상상당히장점으로작용하고있습니다.그래서사람들이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-dgcc-3.2.2-intel-local.gz

#ls
gcc-3.2.2-intel-local

#pkgadd-dgcc-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가지의압축파일이존재합니다.(더많을수있슴.현재SUNOneStudio8compile60trial일경우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로설치합니다.
#tarxvfDEV_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<-기본적으로들어가야할패스입니다.
#exportPATH
참고로컴파일시에는몇가지실행명령어를참고하는경우가많습니다.ar라던지.
등등의명령어를참고합니다.그러니패스를추가해줍니다.

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

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

#LD_LIBRARY_PATH=/usr/local/lib
#exportLD_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:openfaild:Nosuchfileofdirectory
ld.so.1파일은동적라이브러리를처리하는데필요한라이브러리입니다.이파일을통해라이브러리가가지는함수또는사용방법을알아냅니다.
그런데영어를해석해봤듯이ld.so.1파일이libstdc++.so.5파일열기에실패했다고나옵니다.실패원인파일이없다고나오는군요...이파일은라이브러리입니다.파일이있다면라이브러리패스를추가해주면될것이고없다면저라이브러리를설치해줘야합니다.

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

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

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

예5)
#make
...
.....
.......
Makingallinreadline
rm-flibreadline.a
falsecrulibreadline.areadline.ofunmap.okeymaps.ovi_mode.oparens.orltty
.ocomplete.obind.oisearch.odisplay.osignals.outil.okill.oundo.omacro.
oinput.ocallback.oterminal.oxmalloc.ohistory.ohistsearch.ohistexpand.o
histfile.onls.osearch.oshell.otilde.o
***Errorcode255
make:Fatalerror:Commandfailedfortarget`libreadline.a'
Currentworkingdirectory/export/home/root/mysql-4.0.18/readline
***Errorcode1
make:Fatalerror:Commandfailedfortarget`all-recursive'
Currentworkingdirectory/export/home/root/mysql-4.0.18
***Errorcode1
make:Fatalerror:Commandfailedfortarget`all'
#

컴파일중all-recursive어쩌고저쩌고나오면서컴파일이중지되는경우가있습니다.이런경우make버전이낮기때문입니다.최신의make패키지를설치하시면됩니다.
설치했는데도이런에러가뜬다면패스경로상/usr/ccs/bin/make보다/usr/local/bin/make의경로가뒤에있기때문입니다.직접패스까지쳐서실행하시거나.패스의경로를/usr/local/bin을앞으로옮기시면됩니다.