You are on page 1of 5

Dicas rpidas para uso do compilador gcc

Considerando o nosso primeiro programa, como


/*MeuprimeiroprogramaemC EscrevendoumamensagemdeGuimaresRosa nome: matrcula: data: ComputaoBsica,TurmaC,1/2009 */ /*diretivaparaincluirfunesdabibliotecapadrodeEntrada/Sada*/ #include<stdio.h> /*funomain,principalemC*/ intmain(void) { /*funoprintfparasadaviaterminal*/ printf("\nCuecuemazul,aodeusdar.\nOsenhorvver,emGois,\ncomono mundocabemundo.\n"); printf("GuimaresRosa,emGrandeSerto:Veredas\n"); return0; }

e supondo que o arquivo com o cdigo acima esteja em meulab1.c na janela terminal do sistema (linux), voc pode executar o compilador gcc fazendo
gccmeulab1.c<enter>

e que gerar um arquivo binrio com nome a.out na mesmo diretrio para executar o programa j compilado basta digitar
./a.out<enter>

digita-se ./ antes do nome do programa binrio para informar ao sistema a localizao do arquivo (no caso, o diretrio atual)

sendo o cdigo do meulab1.c acima, a tela mostrar


Cuecuemazul,aodeusdar. Osenhorvver,emGois, comonomundocabemundo. GuimaresRosa,emGrandeSerto:Veredas

para listar as opes possveis do gcc digite


gcchelp<enter>

e ser mostrado na tela


Usage:gcc[options]file... Options: passexitcodesExitwithhighesterrorcodefromaphase helpDisplaythisinformation targethelpDisplaytargetspecificcommandlineoptions (Use'vhelp'todisplaycommandlineoptionsofsubprocesses) dumpspecsDisplayallofthebuiltinspecstrings dumpversionDisplaytheversionofthecompiler dumpmachineDisplaythecompiler'stargetprocessor printsearchdirsDisplaythedirectoriesinthecompiler'ssearchpath printlibgccfilenameDisplaythenameofthecompiler'scompanionlibrary printfilename=<lib>Displaythefullpathtolibrary<lib> printprogname=<prog>Displaythefullpathtocompilercomponent<prog> printmultidirectoryDisplaytherootdirectoryforversionsoflibgcc printmultilibDisplaythemappingbetweencommandlineoptionsand multiplelibrarysearchdirectories printmultiosdirectoryDisplaytherelativepathtoOSlibraries Wa,<options>Passcommaseparated<options>ontotheassembler Wp,<options>Passcommaseparated<options>ontothepreprocessor Wl,<options>Passcommaseparated<options>ontothelinker Xassembler<arg>Pass<arg>ontotheassembler Xpreprocessor<arg>Pass<arg>ontothepreprocessor Xlinker<arg>Pass<arg>ontothelinker combinePassmultiplesourcefilestocompileratonce savetempsDonotdeleteintermediatefiles pipeUsepipesratherthanintermediatefiles timeTimetheexecutionofeachsubprocess specs=<file>Overridebuiltinspecswiththecontentsof<file> std=<standard>Assumethattheinputsourcesarefor<standard> sysroot=<directory>Use<directory>astherootdirectoryforheaders forheadersandlibraries B<directory>Add<directory>tothecompiler'ssearchpaths b<machine>Rungccfortarget<machine>,ifinstalled V<version>Rungccversionnumber<version>,ifinstalled vDisplaytheprogramsinvokedbythecompiler ###Likevbutoptionsquotedandcommandsnotexecuted EPreprocessonly;donotcompile,assembleorlink SCompileonly;donotassembleorlink

cCompileandassemble,butdonotlink o<file>Placetheoutputinto<file> x<language>Specifythelanguageofthefollowinginputfiles Permissiblelanguagesinclude:cc++assemblernone 'none'meansreverttothedefaultbehaviorof guessingthelanguagebasedonthefile'sextension Optionsstartingwithg,f,m,O,W,orparamareautomatically passedontothevarioussubprocessesinvokedbygcc.Inordertopass otheroptionsontotheseprocessestheW<letter>optionsmustbeused.

por exemplo, se ao invs de digitarmos como anteriormente


gccmeulab1.c<enter>

quisermos alterar o nome do arquivo binrio que ser produzido, usamos


gccmeulab1.comeu<enter>

o arquivo binrio gerado ter nome meu, e para executar agora use
./meu<enter>

seja agora o seguinte programa que faz uso de funes de uma biblioteca matemtica
/*Esteprogramacalculaeimprimearaizquadradadasomadedoisnmeroselevados aoquadrado,fornecidospelousurioviateclado*/ #include<stdio.h> #include<math.h> intmain(void) { /*definieslocais*/ doublecat1,cat2,raiz_soma2; /*mensagens*/ printf("\nBemvindos!Esteprogramarecebedoisvaloresecalcula\n"); printf("araizquadradadasomadeseusquadrados\n"); printf("Entrecomosnumeros\n"); printf("naformannnn<enter>\n"); scanf("%lf%lf",&cat1,&cat2); /*raizquadradadasomadosquadrados*/ raiz_soma2=sqrt(cat1*cat1+cat2*cat2); printf("Araizquadradadasomadosquadradoseh:%.4f\n\n",raiz_soma2); printf("Tchau!\n"); return0; }

na segunda diretiva, inclui-se o arquivo math.h que contm funes matemticas disponveis na biblioteca do gcc. A funo especfica sendo usada a sqrt, a qual calcula a raiz quadrada de um nmero real. se tentarmos compilar o programa acima, considerando ele um arquivo meulab2.c com
gccmeulab2.comeu2<enter>

o sistema informaria o seguinte erro


/tmp/ccMEoCUq.o:Infunction`main': meulab2.c:(.text+0x8b):undefinedreferenceto`sqrt' collect2:ldreturned1exitstatus

indicando que ele desconhece a funo sqrt ao usar funes de uma biblioteca voc deve informar o compilador o nome dela na montagem do

arquivo binrio, dessa forma


gccmeulab2.comeulm<enter>

assim ele gera o binrio sem problemas. a opo para usar uma biblioteca o sistema -l e no caso m o nome da biblioteca matemtica.

You might also like