View
18
Download
0
Category
Preview:
Citation preview
LABORATRIO DE MEIOS POROSOS EPROPRIEDADES TERMOFSICAS
e
NCLEO DE PESQUISA EM CONSTRUO
Apostila de Programao Orientada a Objeto em C++Parte V- Programao para Linux
Andr Duarte Bueno, UFSC-LMPT-NPChttp://www.lmpt.ufsc.br/~andre
email: andre@lmpt.ufsc.brVerso 0.4.5
12 de dezembro de 2002
Apostila de CVS. Verso 0.4.5Distribuda na forma GFDL (http://www.gnu.org/licenses/licenses.html#TOCFDL).Copyright (C) 2002 - Andr Duarte Bueno.
Esta apostila textbook livre; voc pode redistribu-la e/ou modific-la sob os termos da LicenaPblica de Documentos da GNU (GFDL), conforme publicada pela Free Software Foundation; verso1.2 da Licena como (a seu critrio) qualquer verso mais nova; preservando as sees no InvariantSections no Front-Cover Texts, and no Back-Cover Texts. Uma cpia da licena localizada nocaptulo GNU Free Documentation License.Esta apostila software livre; voc pode redistribu-la e/ou modific-la sob os termos da Licena Pblica Geral GNU, conforme publicada pela FreeSoftware Foundation; tanto a verso 2 da Licena como (a seu critrio) qualquer verso mais nova.
Desenvolvida noLaboratrio de Meios Porosos e Propriedades Termofsicas (http://www.lmpt.ufsc.br)e no Ncleo de Pesquisa em Construo (http://www.npc.ufsc.br), com apoio doCurso de Ps-Graduao em Engenharia Mecanica (http://www.posmec.ufsc.br)e da Universidade Federal de Santa Catarina (http://www.ufsc.br).
1
Sumrio
I Programao Para GNU/Linux, Unix 9
1 Introduo a Programao GNU/Linux, Unix 101.1 Termos e conceitos utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 O bsico do GNU/Linux, Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Comandos do shell teis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.2.2 Expresses regulares3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.2.3 Programas telnet e ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Diretrios teis para programadores . . . . . . . . . . . . . . . . . . . . . . . . . . 221.4 Programas teis para programadores . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 Edio de Texto Emacs e VI 252.1 Introduo ao editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 Comandos do editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.2 Movimento do cursor (use as setas de direo) . . . . . . . . . . . . . . . . 262.2.3 Cut/Copy/Paste/Undo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.2.4 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.2.5 Pesquisa e substituio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.2.6 Mltiplas janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.2.7 Encerrando seo do Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Comandos do editor vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3 Os programas diff, patch, indent 303.1 O programa diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.1 Sentenas para o diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2 O programa patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.3 O programa indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4 Compilando com gcc, g++ 364.1 Prottipo e parmetros do gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2 Arquivos gerados pelo gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.3 Exemplo de uso do gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.4 Sentenas para o compilador da gnu . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2
SUMRIO 3
5 Make 395.1 Um arquivo de projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.2 Prottipo e parmetros do make . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.3 Formato de um arquivo Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3.1 Criando variveis em um arquivo Makefile . . . . . . . . . . . . . . . . . . 405.3.2 Criando alvos em um arquivo Makefile . . . . . . . . . . . . . . . . . . . . 41
5.4 Exemplo de um arquivo Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.5 Sentenas para o make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6 Bibliotecas 446.1 Introduo a montagem de bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.1.1 ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446.1.2 ranlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.1.3 nm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466.1.4 objdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.1.5 ldd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.1.6 ldconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Conveno de nomes para bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . 486.3 Bibliotecas usuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.4 Montando uma biblioteca esttica (libNome.a) . . . . . . . . . . . . . . . . . . . . . 48
6.4.1 Usando uma biblioteca esttica . . . . . . . . . . . . . . . . . . . . . . . . . 496.5 Montando uma biblioteca dinmica (libNome.so) . . . . . . . . . . . . . . . . . . . 50
6.5.1 Usando uma biblioteca dinmica . . . . . . . . . . . . . . . . . . . . . . . . 516.5.2 Vantagens/desvantagens da biblioteca dinmica . . . . . . . . . . . . . . . . 51
6.6 Sentenas para bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7 Libtool 557.1 Introduo ao libtool2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557.2 Forma de uso do libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557.3 Criando uma biblioteca sem o libtool . . . . . . . . . . . . . . . . . . . . . . . . . . 567.4 Criando uma biblioteca esttica com o libtool . . . . . . . . . . . . . . . . . . . . . 567.5 Criando uma biblioteca dinmica com o libtool . . . . . . . . . . . . . . . . . . . . 577.6 Linkando executveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577.7 Instalando a biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577.8 Modos do libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587.9 Sentenas para o libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8 Debug (Depuradores, Debuggers) 608.1 Introduo ao debuger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608.2 Comandos do gbd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608.3 Exemplo de uso do gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608.4 Sentenas para o gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
9 Profiler (gprof)2 629.1 Introduo ao gprof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629.2 Sentenas para o profiler: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
SUMRIO 4
10 Verso de Depurao, Final e de Distribuio 6410.1 Verso debug, release e de distribuio . . . . . . . . . . . . . . . . . . . . . . . . . 64
10.1.1 Verso debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6410.1.2 Verso final (release) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6410.1.3 Distribuio dos programas e bibliotecas . . . . . . . . . . . . . . . . . . . 64
10.2 Sentenas para distribuio de cdigo fonte . . . . . . . . . . . . . . . . . . . . . . 67
11 Documentao de Programas Usando Ferramentas GNU/Linux 6811.1 Introduo a documentao de programas . . . . . . . . . . . . . . . . . . . . . . . 6811.2 Documentao embutida no cdigo com JAVA_DOC . . . . . . . . . . . . . . . . . 68
11.2.1 Exemplo de cdigo documentado . . . . . . . . . . . . . . . . . . . . . . . 6811.2.2 Sentenas para documentao java_doc . . . . . . . . . . . . . . . . . . . . 69
11.3 Tutorial de configurao e uso do DOXYGEN . . . . . . . . . . . . . . . . . . . . . 7011.3.1 Exemplo de programa documentado . . . . . . . . . . . . . . . . . . . . . . 7211.3.2 Exemplo de diagramas gerados pelo doxygen . . . . . . . . . . . . . . . . . 74
11.4 Documentao profissional com sgml/xml (LYX) . . . . . . . . . . . . . . . . . . . 75
12 Seqencia de Montagem de Um Programa GNU2 7812.1 Introduo a programao multiplataforma com GNU . . . . . . . . . . . . . . . . . 7812.2 aclocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8012.3 ifnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8012.4 autoscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.4.1 Roteiro do autoscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8112.5 autoheader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.5.1 Roteiro do autoheader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8112.6 automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.6.1 Introduo ao automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8212.6.2 Sentenas para o automake . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
12.7 autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8512.7.1 Introduo ao autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8512.7.2 Prottipo do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8612.7.3 Roteiro do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8612.7.4 Estrutura de um arquivo configure.in . . . . . . . . . . . . . . . . . . . . . . 8612.7.5 Exemplo de um arquivo configure.in . . . . . . . . . . . . . . . . . . . . . . 8712.7.6 Macros do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8712.7.7 Como aproveitar os resultados das pesquisas realizadas pelo
autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9012.7.8 Variveis definidas no arquivo configure.in e que sero substitudas no ar-
quivo Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9212.8 autoreconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9312.9 ./configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9412.10Como incluir instrues do libtool em seu pacote gnu . . . . . . . . . . . . . . . . . 94
12.10.1 Exemplo de arquivo makefile.am usando o libtool . . . . . . . . . . . . . . . 9512.10.2 Exemplo de arquivo configure.in usando o libtool . . . . . . . . . . . . . . . 95
12.11Exemplo Completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
SUMRIO 5
13 Introduo ao Controle de Verses Com o CVS 10013.1 O que o CVS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10013.2 Comandos do cvs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10113.3 Seqencia de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
13.3.1 Roteiro para criar um repositrio . . . . . . . . . . . . . . . . . . . . . . . 10313.3.2 Para importar os arquivos de seu projeto antigo para dentro do repositrio . . 10413.3.3 Para baixar o projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10513.3.4 Para criar mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10613.3.5 Para adicionar/remover arquivos e diretrios . . . . . . . . . . . . . . . . . . 10713.3.6 Para atualizar os arquivos locais . . . . . . . . . . . . . . . . . . . . . . . . 110
13.4 Verses, tags e releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11113.4.1 Entendendo as verses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11113.4.2 Para criar tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11113.4.3 Para criar releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11313.4.4 Recuperando mdulos e arquivos . . . . . . . . . . . . . . . . . . . . . . . 114
13.5 Para verificar diferenas entre arquivos . . . . . . . . . . . . . . . . . . . . . . . . . 11513.6 Verificando o estado do repositrio . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
13.6.1 Histrico das alteraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11613.6.2 Mensagens de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11613.6.3 Anotaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11713.6.4 Verificando o status dos arquivos . . . . . . . . . . . . . . . . . . . . . . . . 117
13.7 Ramos e Misturas (Branching and Merging) . . . . . . . . . . . . . . . . . . . . . . 11813.7.1 Trabalhando com ramos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11813.7.2 Mesclando 2 verses de um arquivo . . . . . . . . . . . . . . . . . . . . . . 11913.7.3 Mesclando o ramo de trabalho com o ramo principal . . . . . . . . . . . . . 119
13.8 Configurao do cvs no sistema cliente-servidor3 . . . . . . . . . . . . . . . . . . . 12013.8.1 Variveis de ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
13.9 Como baixar programas de terceiros usando o cvs . . . . . . . . . . . . . . . . . . . 12113.10Frontends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12113.11Sentenas para o cvs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12113.12Um diagrama com os comandos do cvs . . . . . . . . . . . . . . . . . . . . . . . . 124
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Lista de Figuras
2.1 O editor de texto emacs (observe o tem de menu C++). . . . . . . . . . . . . . . . . 2911.1 Ilustrao da hierarquia TMatriz da biblioteca LIB_LMPT. . . . . . . . . . . . . . . 7411.2 Ilustrao da hierarquia da classe TRotulador3D da biblioteca LIB_LMPT. . . . . . . 7511.3 Ilustrao das dependncias do arquivo TRotulador3D. . . . . . . . . . . . . . . . . 7611.4 O site do LYX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
13.1 Verses de um arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11113.2 Criando um tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11213.3 Criando um release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11313.4 Como ficam os ramos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11813.5 Um frontend para o cvs no GNU/Linux, Unix (o cervisia). . . . . . . . . . . . . . . 12213.6 Um frontend para o cvs no Windows. . . . . . . . . . . . . . . . . . . . . . . . . . 12313.7 Diagrama com os comandos do cvs. . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6
Lista de Tabelas
1.1 Diretrios importantes para o programador. . . . . . . . . . . . . . . . . . . . . . . 221.2 Programas teis para desenvolvedores de software no ambiente GNU/Linux. . . . . . 24
6.1 Bibliotecas usuais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
8.1 Comandos do gdb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
12.1 Sequncia executada pelo programador para montagem de programas multi-plataformausando o padro GNU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
12.2 Sequncia executada pelo usurio. . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7
Listings
3.1 Arquivo e06a-hello.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.2 Arquivo e06b-hello.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.3 Arquivo diff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.4 Arquivo diff -c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.5 Arquivo diff -u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.6 Arquivo ex-vector-1-indent.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345.1 Arquivo makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2 Exemplo de uso do programa make. . . . . . . . . . . . . . . . . . . . . . . . . . . 426.1 Sada do comando ar - -help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.2 Sada do comando nm help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466.3 Sada do comando ldd /usr/bin/lyx. . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.4 Arquivo makefile com bibliotecas estticas e dinmicas. . . . . . . . . . . . . . . . . 516.5 Arquivo mostrando o uso do makefile. . . . . . . . . . . . . . . . . . . . . . . . . . 537.1 Arquivo libtool - -help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5511.1 Exemplo de arquivo de configurao do doxygen com comentrios. . . . . . . . . . 7111.2 Sada do comando doxygen - -help. . . . . . . . . . . . . . . . . . . . . . . . . . . 7211.3 Exemplo de cdigo documentado no formato JAVA_DOC para uso com o programa
doxygem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7213.1 Sada do comando: cvs - -help-options . . . . . . . . . . . . . . . . . . . . . . . . . 10113.2 Sada do comando: cvs - -help-commands . . . . . . . . . . . . . . . . . . . . . . . 10113.3 Sada do comando: cvs- -help-synonyms . . . . . . . . . . . . . . . . . . . . . . . . 10213.4 Sada do comando: cvs import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10413.5 Como fica o repositorio aps a importao . . . . . . . . . . . . . . . . . . . . . . . 10513.6 Sada do comando: cvs -H checkout . . . . . . . . . . . . . . . . . . . . . . . . . . 10513.7 Sada do comando: cvs -H commit . . . . . . . . . . . . . . . . . . . . . . . . . . . 10713.8 Sada do comando cvs commit aps adio de um mdulo . . . . . . . . . . . . . . 10713.9 Sada do comando: cvs -H update . . . . . . . . . . . . . . . . . . . . . . . . . . . 11013.10Sada do comando: cvs -tag nome . . . . . . . . . . . . . . . . . . . . . . . . . . . 11213.11Sada do comando: cvs commit -r 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 11413.12Sada do comando: cvs-diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11513.13Sada do comando: cvs -log leiame.txt . . . . . . . . . . . . . . . . . . . . . . . . . 11613.14Sada do comando: cvs -status leiame.txt . . . . . . . . . . . . . . . . . . . . . . . . 117Lista de programas
8
Parte I
Programao Para GNU/Linux, Unix
9
Captulo 1
Introduo a Programao GNU/Linux, Unix
Esta parte da apostila contm dicas e instrues para montagem de programas usando o formatomultiplataforma da GNU. Inicialmente apresenta-se uma lista de comandos do shell e de programasteis no ambiente GNU/Linux. Descreve-se o programa, sua utilidade, os arquivos de configurao eos parmetros opcionais. Quando conveniente apresenta-se um exemplo.
A seguir descreve-se o uso dos editores emacs e vi, e os programas diff, patch e indent. Descreve-se o compilador gcc/g++ e o make para montagem de programas pequenos. Como montar bibliotecas,o uso do debuger e do profiler, como distribuir seu cdigo, como documentar seus programas.
Depois, apresenta-se um roteiro para montar programas completos usando o padro GNU.
O texto aqui apresentado um texto introdutrio. Um texto intermedirio, que abrange diversos aspectos da programao para GNU/Linux (fer-
ramentas da gnu, processos, sinais, device drives, programao em ambientes grficos) en-contrado no livro Linux Programming Unleashed de Kurt Wall et al. Em portugus existe oProgramando com Ferramentas GNU (editado pela conectiva).
Textos avanados so os manuais disponibilizados na internet, isto , para aprender em detalheso autoconf, baixe o manual do autoconf, o mesmo vlido para os demais tpicos apresentadosnesta apostila.
Este resumo tem como base as pginas man e os manuais pblicos do make (3.78), egcs (1.1.2),egcs++ (1.1.2), aucotonf (2.13), automake (1.4), libttol1, o manual do doxygen e artigos da revista doGNU/Linux (http://www.revistadolinux.com.br). Tambm foram consultadas as referncias[13, 9, 12, 11, 3][2, 10, 1, 4][8][7, 5].
1Estes manuais so encontrados, em ingls, no site da gnu (http://www.gnu.org).
10
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 11
1.1 Termos e conceitos utilizados2
Apresenta-se aqui, brevemente, uma explicao dos termos utilizados no mundo do software livre.
Linux: clone livre do kernel do UNIX, escrito a partir do zero por Linus Torvalds, com a ajuda deum grupo de programadores espalhados pela internet [isto , o linux somente um KERNEL].Foi projetado para estar em conformidade com o POSIX e com a Single Unix Specification.
GNU: acrnimo para GNU no UNIX. GNU o nome de um sistema operacional completo ecompatvel com UNIX escrito a partir de 1983 por Richard Stallman e inmeros hackers dacomunidade de software livre espalhados pela internet. O GNU um sistema 100% livre, ouseja, ele fornece as 4 liberdades bsicas do software livre: A liberdade de uso, modificao,cpia e publicao de verses modificadas.
GNU/Linux: sistema operacional GNU 100% livre que utiliza o Linux como kernel. GNU/Linux a variante mais conhecida do sistema GNU.
GPL: licena de software livre mais utilizada no mundo. A caracterstica que qualquer trabalho de-rivado de um software livre sob GPL, obrigatoriamente deve permanecer livre. A GPL pode serobtida em http://www.gnu.org/licenses/gpl.html, uma cpia apresentada no apndice??.
Cdigo Aberto: expresso utilizada para indicar que voc pode ver o cdigo fonte do programa.Entretanto, nada pode ser dito a respeito das condies sob as quais o cdigo fonte se encontra.Existem programas de cdigo aberto que no so livres pois o usurio, dependendo da licena,pode ser proibido de alterar e publicar o cdigo.
Open Source Initiative: grupo desmembrado do movimento pelo software livre em 1998 e querejeita a luta pela liberdade no uso do software. Seu objetivo disseminar a idia de que ocdigo fonte esteja disponvel e que as modificaes sejam permitidas gerando assim programasmelhores. Apesar disto este grupo costuma recomendar o uso da licena GPL, que representamelhor o esprito do software livre. Isto torna os dois grupos cooperativos do ponto de vista decriao de softwares.
Software Livre: Software que garante ao usurio plenas liberdades de uso, modificao, cpia epublicao de verses modificadas. A definio de software livre pode ser encontrada em:http://www.gnu.org/philosophy/free-sw.html.
Movimento pelo Software Livre: Movimento surgido na dcada de 70 em conseqncia da cres-cente presso recebida para a adoo de softwares proprietrios e assinaturas de tratados deno-divulgao. O movimento ganhou forca a partir da dcada de 80 com o projeto GNU quelibertava os usurios dos sistemas UNIX proprietrios. O GNU consolidou-se na dcada de90 como um sistema completo e funcional atingindo uma qualidade tcnica comparvel aosmelhores sistemas operacionais proprietrios.
Em resumo, Linux um kernel e no um sistema operacional. Apesar de Linux ser comumenteusado em referncia ao sistema operacional GNU/Linux voc deve evitar este uso equivocado por
2Contribuio do revisor Ricardo Grutzmacher (grutz@terra.com.br).
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 12
questes de clareza tcnica e por questes de crdito ao projeto GNU que forneceu o seu sistemaoperacional para ser adaptado ao kernel Linux. Sempre que voc quiser falar do sistema operacionaluse o termo GNU/Linux. Desta forma voc estar levando adiante os ideais do software livre queesto representados no projeto GNU.
1.2 O bsico do GNU/Linux, UnixApresenta-se a seguir um guia com alguns comandos de shell do GNU/Linux, Unix, MacOS X, e
que so teis para programadores.
1.2.1 Comandos do shell teis3
Lista-se a seguir alguns comandos de shell teis para programadores. Uma descrio mais de-talhada dos mesmo pode ser encontrada em apostilas/livros sobre o GNU/Linux, Unix. Voc podeobter informaes simplificadas sobre estes comandos usando o programa man (de manual). Use ocomando man nomeDoPrograma para ver um manual simples do programa. Verses mais atuali-zadas dos manuais destes programas so obtidos com info nomeDoPrograma. Voc tambm podeobter um help resumido usando nomeDoPrograma - -help.
Nos exemplos apresentados a seguir, os comentrios aps o sinal # no devem ser digitados. Sevoc j um usurio experiente do GNU/Linux pode pular esta parte.
Diretrios. Diretrio atual... Diretrio pai (Ex: cd ..).~ Diretrio HOME do usurio (Ex: cd ~).
cd Muda diretrio corrente
cd /home/philippi #Caminho completocd ../../usr #Caminho relativocd - #Alterna para diretrio anterior
pwd Mostra a path do diretrio corrente.
ls Lista o contedo do diretrio.
-l Lista detalhada.-a Mostra executvel e ocultos.-b Nmero de links do arquivo.-m Mostra tudo em uma linha.-F Mostra \ dos diretrios.-x Mostra em colunas.
3Uma excelente apostila de referncia sobre o GNU/Linux encontrada em http://www.cipsga.org.br.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 13
ls -F | egrep / #mostra diretrios
tree Lista em rvore.
tree -d #Lista somente os diretrios
mkdir Cria diretrio.
mkdir testmkdir d1 d2 #Cria diretrios d1 e d2mkdir d1/d2 #Cria d1 e o filho d2mkdir -p d3/d31/d32 #Cria os diretrios d3 d3/d31 d3/d31/d32
mvdir Move ou renomeia um diretrio.
rmdir Remove o diretrio.
-R #Recursivo, elimina subdiretrios (usar com cuidado).
rmdir -p d3/d31/d32 #Remove todos os diretriosrm -R diretorio #Remove o diretrio e seus sub-diretrios
Arquivos
cp a1 a2 Cpia arquivos e diretrios.
-b Cria backup de a2.-i Copia iterativa.-r Cpia recursiva.-P Cpia arquivo e estrutura de diretrio.-p Preserva as permisses e horas.-v Modo verbose.-b Cria backup.
cp a1 a2
mv Move arquivos (renomeia arquivos).
-b Cria backup.-v Modo verbose.-i Iterativa.
mv a1 a2 #Renomeia arq a1 para a2mv d1 d2 #Renomeia dir d1 para d2mv -b a1 a2 #Renomeia com backup
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 14
rm Remove arquivos (retira links).
-d Remove diretrio.-i Remove iterativamente.-r Remove diretrios recursivamente.-f Desconsidera confirmao.
#S execute o comando abaixo em um subdiretrio sem importnciarm -f -r * #Remove tudo (*) sem pedir confirmao
ln Linka arquivos e diretrios (um arquivo com link s deletado se for o ltimo link).
ln -f chap1 introln origem link #Cria link permanenteln -s origem link #Cria link simblico
find O find usado para pesquisar arquivos em seu HD.
find path expresso-name Informa o nome do arquivo.-print Mostra a path.-type Informa o tipo.-atime Informa dados de data.-size Informa tamanho(+ ou -).-o Aceita repetio de parmetro (Other).-xdev Desconsidera arquivos NFS.-exec [comando [opcoes]] Permite executar comando.
#Para achar arquivos core:find / -name core#Para localizar arquivos do usurio:find PATH -USER nomeUsurio#Para localizar arquivos *.cpp:find PATH -name *.cpp#Para localizar e remover arquivos .o:find PATH -name *.o | xargs rm#Localizando tudo com a extenso *.o e *.afind -name *.o-o -name *.a#PS: exec s funciona com alguns programas, melhor usar xargs.find -type f -atime +100 -printfind . -size +1000kfind ~/ -size -100kfind [a-c]????find file[12]
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 15
head n Mostrar as primeiras n linhas de um arquivo.
head -5 nome.txt
tail n Exibe arquivo a partir de uma linha.
tail -20 nome.txt
nl Nmero de linhas do arquivo.
wc Nmero de linhas, de palavras e de bytes do arquivo.
cat arq1 Mostra contedo do arquivo arq1.
cat a1 a2 Mostra arquivos a1 e depois a2
cat -n a2 Mostra contedo de a2 com numerao
cat f1 #Mostra arquivo f1#Cria novo arquivo:
cat > texto.txt...digita o texto...contrl+d #Finaliza arquivocat a1 a2 > a3 #Concatena a1 e a2 e armazena em a3cat a > > b #Acrescenta ao final do arquivo b o arquivo als -la | cat -n
less arq Mostra contedo do arquivo (+completo)
#/str para localizar a string str no texto visualizadoless arq #q para sair
file arq Informa o tipo de arquivo.
file *file * | egrep directory
tr Converte cadeias de caracteres em arquivos.
ls | tr a-z A-Z #de minsculas para maisculas
xargs Facilita passagem de parmetros para outro comando.xargs [opes][comando [opes]]
#Procura e deleta arquivos *.cpp
find /tmp -name "*.cpp" | xargs rm
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 16
Pesquisa dentro de arquivos
grep O grep usado para pesquisar o que tem dentro de um arquivo.
-n Mostra nmero da linha.-F O grep funciona como o fgrep.-c Retorna nmero de coincidncias.-i Desconsidera maisculas/minsculas.-s Desconsidera mensagens de erro.-v Modo verbose.-A n Lista tambm as n linhas posteriores.-B n Lista tambm as n linhas anteriores.-r Ordem inversa.-f Usa arquivo auxiliar.
man grep #Mostra detalhes do grepgreep -v buble sort.cls -l | egrep "Julia" #Lista diretrio e pesquisa pelo arquivo julials -la | egrep "Sofia"grep ^[0-9] guide.txtgrep "(b)" guide.txtgrep arqAux guide.txt # Pesquisa em guide.txt usando arqAux
sort Ordena arquivos.
-c Verifica arquivo.-o Especifica nome arquivo sada.-d Ordem dicionrio.-f Despreza diferena maiscula/minscula.-t Atualiza data e hora.-s Modo silencioso.
sort -r arquivols | sort -r #Ordem invertida#Ordena a listagem de diretrio a partir da 4 coluna,considerando nmerols -l |egrep rwx | sort +4n
Compactao e backup
zip Compatvel com pkzip/pkunzip do DOS.
unzip Unzipa arquivos zip.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 17
zip -r nome.zip nomeDiretriounzip nome.zip
gzip / gunzip Compacta/Descompacta arquivos com a extenso: gz,.Z,-gz,.z,-z
-c Mostra arquivo na tela.-d Descomprime o arquivo.-S Extenso do arquivo.-f Fora compresso.-l Lista arquivos.-r Mostra diretrios recursivamente.-t Testa integridade do arquivo.-v Modo verbose.-1 Mais veloz e menos compactado.-9 Mais lento e mais compactado.
#Para compactar todo um diretriotar -cvf nomeDiretorio.tar nomeDiretoriogzip nomeDiretorio.tar#Para descompactargunzip nomeDiretorio.tar.gztar -xvf nomeDiretorio.tar
bzip2 Compactador mais eficiente que o gzip.
bunzip2 Descompacta arquivos bz2.
bzip2recover Recupera arquivos bz2 extragados.
-t Testa-v Modo verbose
bz2cat Descompacata para tela (stdout).lha Cria e expande arquivos lharc.
unarj Descompacta arquivos arj.split til para copiar um arquivo grande para disquetes.
Gera os arquivos xaa,xab,xac,... Veja man split.
#Dividir um arquivo de 10mb em disketes de 1.44mb:split -b 1440kb nomeArquivoGrande.doc#Para recuperar use o cat:cat xaa xab xac > nomeArquivoGrande.doc
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 18
tar O tar permite a voc agrupar um conjunto de arquivos em um nico, facilitando o backup (ou oenvio pela internet). Pode-se ainda compactar os arquivos agrupados com o gzip.-c Cria novo arquivo.-v Modo verbose.-z Descompacta arquivos (*.tar.gz).-f NomeArquivo.-w Modo iterativo.-r Acrescenta no modo apende.-x Extrai arquivos.-A Concatena arquivos.-d Compara diferenas entre arquivos.- -delete Deleta arquivos.-t Lista o contedo do arquivo.-u Atualiza o arquivo.-N Aps a data tal.-o Extrai arquivos para monitor.-w Iterativa.-C Muda o diretrio.-G Backup incremental.
#Empacotando origem em destinotar -cf origem > destino.tar#Empacotando e j compactandotar -cvzf destino.tar.gz origem#Desempacotandotar -xf nome.tartar -xzvf nome.tgztar -xzvf nome.tar.gztar -xvwf nome.tar#Backup completo no dispositivo /dev/fd0tar cvfzM /dev/fd0 / #Backuptar xvfzM /dev/fd0 #Restaurao
Diversos
[*] Metacaracter.[?] Caracter coringa.clear Limpa a tela.
date Mostra data e hora.
date -s 8:50 #Acerta hora para 8:50
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 19
1.2.2 Expresses regulares3
Alguns programas do GNU/Linux aceitam o uso de expresses regulares (principalmente os daGNU). O uso de expresses regulares til nas pesquisas de arquivos com find, no uso do emacs,entre outros.
Alguns caracteres so usados para passar parmetros para o interpretador das expresses regulares,para us-los na pesquisa, deve-se preceder o caracter com /.
Veja abaixo alguns exemplos de expresses regulares.[xyz] Qualquer das letras dentro do colchete.[^xy] Exceto x e y.
[t-z] De t at z (tuvwxyz).[a-zA-Z] Qualquer letra.[0-9] Qualquer nmero.^ No incio do pargrafo.
$ No fim do pargrafo.
\< No incio da palavra.
\ No fim da palavra.
\>search Palavra que termina com search.
z* Letra z, 0 ou mais vezes: z,zz,zzz,zzzz,...
Z+ Letra Z, 1 ou mais vezes.
A? Letra A pode ou no fazer parte.
revistas? revista ou revistas.
A{m} Letra A m vezes.[0-9]{3} Nmero de 3 dgitos.Z{3,5} Letra Z de 3 a 5 repeties zzz,zzzz,zzzzzK{,7} At 7 repeties de K.K{3,} No mnimo 3 repeties de K.{0,} O mesmo que *.{1,} O mesmo que +.{0,1} O mesmo que ?.() Usado para deixar a expresso mais clara (precedncias).
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 20
Linux-(6|6.1|6.2), Acha Linux-6, Linux-6.1, Linux-6.2.O uso de () cria variveis internas que podem ser acessadas como nos exemplos abaixo:
(quero)-\1 = quero-quero.
([a-zA-Z]\1 Qualquer letra espao qualquer letra.
. Qualquer caracter. Se estiver no meio de uma sentena use \.
\w Qualquer letra.
\W Nenhuma letra.
| Pipe (tubo).
Converso de wildcard (dos), para expresso regular.
*.txt *\.txt.
arq.cpp Arq\.cpp.
arq?.cpp Arq.\.cpp.
Cap[1-7].lyx Cap[1-7]\.lyx.
arq{a,b} arq(a|b).
Exemplo:
var=Avancado Define varivel var, cujo contedo o diretrio Avancado.Para usar uma varivel definida use $var.
ls var No aceita (ls: var: Arquivo ou diretrio no encontrado).ls $var Mostra o contedo de var, do diretrio Avancado.ls var No aceita aspas simples.ls "echo $var" No interpreta contedo de aspas duplas.ls echo $var Interpreta o contedo que esta dentro da crase.
for i in *.html; do mv $i $i.old ; done
1.2.3 Programas telnet e ftpApresenta-se a seguir os principais comandos dos programas telnet e ftp. Atualmente o telnet e
o ftp esto sendo substituidos pelo ssh. O ssh um secure shell, permitindo acessar, copiar e pegararquivos de mquinas remotas. Isto , o ssh funciona como o telnet e o ftp, mas com segurana.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 21
telnet
O telnet um programa que executado em seu computador e o conecta a outros computadoresem qualquer lugar do mundo. como se voc estivesse executando os programas do computadorremoto de dentro de seu computador.
Comando Descrio.
? Lista os comandos.
open Conecta com um computador remoto.
display Mostra os parmetros da operao.
mode Modo linha a linha ou caracter a caracter.
Set,unset Seta os parmetros de operao.
send Transmitir caracteres especiais.
status Informaes de estatus.
Contrl +z Suspende o telnet, chama o shell.
fg Retorna do shell para o telnet. Volta para o ltimo programa em operao.
logout Encerra conexo avisando.
close Fecha a conexo corrente.
quit Encerra o telnet.
ftp
O ftp precisa de 2 computadores, um cliente e outro servidor. O programa ftp cliente executadoem seu computador e o programa ftp servidor em um computador remoto. O cliente envia comandos(como listar diretrios) para o servidor, o servidor responde (mostrando o diretrio).
Depois de localizado o arquivo (que voc deseja baixar), o mesmo pode ser obtido com o comandoget nome_do_arquivo. Com quit voc encerra a conexo ftp.
help Lista de todos os comandos ftp.
! Pausa o ftp e inicia o shell.
! comando Executa um comando do shell.
Conectando
open h Inicia conexo com host h.
user Define usurio.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 22
ascii Transferncia de arquivo no formato ascii.
binary Transferncia de arquivo no formato binrio.
hash yes/no Mostra o # do arquivo transferido.
prompt yes/no Aguarda resposta para transferncia de mltiplos arquivos.
status Exibe configurao atual.
get Puxa o arquivo para seu computador.
mget Puxa diversos arquivos.
send Envia um arquivo (ou put, ou mput).cd nome Muda o diretrio.
cdup Diretrio pai.
dir ou ls Mostra diretrio com detalhes.
lcd Muda diretrio local.
pwd Mostra a path corrente.
quit Encerra a conexo.
close Encerra conexo.
Agora voc j conhece os comandos e programas mais utilizados em um terminal do GNU/Linux.Podendo navegar, criar, deletar e mover diretrios. Procurar e visualizar o contedo de arquivos.
Como dito anteriormente, voc pode consultar o manual de sua distribuio para obter maioresinformaes sobre estes comandos.
1.3 Diretrios teis para programadoresQuem programa no GNU/Linux precisa saber onde esto o diretrio com os programas do sistema,
o diretrio onde so instalados os programas e onde esto as bibliotecas. Veja na Tabela ?? algunsdestes diretrios.
Tabela 1.1: Diretrios importantes para o programador.
Diretrio Descrio/usr/bin Programas do sistema.
/usr/local/bin Programas locais esto aqui./usr/include Arquivos include
/usr/lib Bibliotecas/usr/openwin/lib Bibliotecas do X window
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 23
1.4 Programas teis para programadoresApresenta-se na Tabela ?? uma lista de programas teis usados no desenvolvimento de programas
no GNU/Linux. Estes programas sero detalhados posteriormente.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 1. INTRODUO A PROGRAMAO GNU/LINUX, UNIX 24
Tabela 1.2: Programas teis para desenvolvedores de software no ambiente GNU/Linux.
Programas utilitriosAmbientes de desenvolvimento
Ambiente para desenvolvimento no KDE kdevelopAmbiente de desenvolvimento semelhante ao Borland xwpe
Ambiente para desenvolvimento no GNOME gladeEditor de texto
Editor de texto simples emacsCompiladores
Compilador C da GNU gccCompilador C++ da GNU g++Compilao automatizada make
Linkagem ldDepurao
Depurador C da GNU gdbDepurador do KDE (kdevelop) kdbgProgramas GNU Compliant
Gerao dos scripts de configurao autoconfGerao dos scripts Makefile automake
Pacote de gerao de bibliotecas libtoolProgramas Diversos
Traa informaes, chamadas a bibliotecas ltraceControle de verses CVS
Formatao do cdigoDiferenas entre arquivos diff
Formata o cdigo bisonOrganiza o cdigo (layout) indent
Analisador lxico flex,flex++Documentao
Gera documentao a partir de tags no cdigo. doxygenGerao de diagramas de classes graphviz
Manipulao binria bfdBinary file descriptor binutil
Profile (analizador de desempenho) gprofMontagem de bibliotecas ar
ndices das bibliotecas ranlibInformaes sobre objetos objdump
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 2
Edio de Texto Emacs e VI
Apresenta-se neste captulo uma breve descrio dos comandos dos editores emacs e vi.
2.1 Introduo ao editor emacsO emacs, ilustrado na Figura ?? um bom editor de texto. O emacs oferece um conjunto de
funes especficas para o desenvolvimento de seus programas em C++.Ao salvar o arquivo com a extenso *.h ou *.cpp, automaticamente o emacs mostra a sintaxe de
C++ atravs do syntax-highlight, isto , o texto aparece colorido.Para maiores informaes sobre o emacs procure no http://www.altavista.com por emacs
programming.Se voc gosta de outros editores de texto, no tem problema. Use o que voc conhece.Os principais comandos de um editor de texto so os famosos cut (ctrl+w), copy (alt+w) e past (ctrl+y).
O undo (ctrl+x+u), o search (ctrl+s+palavra), e o comando para salvar o arquivo (ctrl+x ctrl+s) e fechar oprograma (ctrl+x ctrl+c). Apresenta-se nas sees que seguem os principais comandos do editor emacs.
2.2 Comandos do editor emacsLista-se a seguir, de forma resumida os principais comandos do emacs. A letra ^ representa o
CTRL.
2.2.1 Help^+h n Emacs news.
^h i Info.
^h m Modo de descrio.
^h a Comando apropos.
^h t Emacs tutorial.
^h f Descrio da funo.
25
CAPTULO 2. EDIO DE TEXTO EMACS E VI 26
^-x Acesso a funo de um nico caracter.
Alt-x Acesso a comando de uma palavra.
2.2.2 Movimento do cursor (use as setas de direo)Alt+< Inicio do arquivo.
Home Inicio do arquivo.
pageUp Inicio da pgina.
^p Incio do pargrafo.
^b ^f Linhas.
^a ^e Fim do pargrafo.
Alt+b Alt+f Palavras.
Alt+> Fim do arquivo.
pageDown Fim da pgina.
End Fim do arquivo.
2.2.3 Cut/Copy/Paste/UndoAlt+w Copy.
^w Cut.
^y Paste.
^x u Undo.
^_ Undo.
Alt+y Paste sucessivo.
^d Apaga a letra a direita.
del Apaga a letra a esquerda.
Alt+d Apaga a palavra a direita.
Alt+del Apaga a palavra a esquerda.
^k Apaga toda a linha a direita.
Alt+k Apaga toda a linha a direita inclusive retorno de carro.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 2. EDIO DE TEXTO EMACS E VI 27
2.2.4 Arquivos^x ^f Abre um arquivo do disco ou cria novo.
^x ^d Abre o diretrio.
^x ^s Salva o arquivo em disco.
^x ^w Salvar como.
^x ^d Abre um diretrio.
^x 1 Uma janela.^x 2 Duas Janelas.
^x i Inserir o arquivo.
^x ^b Lista os buffers.
2.2.5 Pesquisa e substituioAlt+% Entre com a string A
Entre com a string B #Pede confirmao
Alt+x repl sEntre com a string AEntre com a string B #No pede confirmao
Pesquisa
^s palavra Procura pela palavra (para baixo).
^r palavra Procura pela palavra (para cima).
2.2.6 Mltiplas janelas^u 0^] Posiciona no inicio da janela^mv Scroll para final da janela^xo Alterna janela ativa^x2 Duas janelas^x1 Uma janela ativa
2.2.7 Encerrando seo do Emacs^x ^c Sai do Emacs.
^z Suspende o Emacs.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 2. EDIO DE TEXTO EMACS E VI 28
Sentenas para o emacs
AUTO SAVE: O emacs salva automaticamente os arquivos em disco com o nome:"#nomeArquivo#.Quando voc salva o arquivo em disco deixa de existir o autoSave.
A Linha de informaes mostra: O nome do arquivo, a linha, a percentagem
2.3 Comandos do editor viEditor de texto simples e eficiente.
:w Salva arquivo em disco.
:q Para sair.
:q! Sai mesmo que o arquivo tenha sido alterado.
:e Edita outro arquivo.
:!com Executa comando do shell.
:r arq L outro arquivo na posio do cursor.
Exemplo:vi arquivo #Edita o arquivoman vi #Maiores informaes sobre o vi
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 2. EDIO DE TEXTO EMACS E VI 29
Figura 2.1: O editor de texto emacs (observe o tem de menu C++).
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 3
Os programas diff, patch, indent
Apresenta-se neste captulo uma breve introduo aos programas diff, patch e indent. Este captulopode ser lido mais tarde sem perda de seqencia.
3.1 O programa diffO programa diff usado para mostrar as diferenas entre 2 arquivos, isto , compara dois arquivos
linha a linha.O programa diff muito til, o mesmo usado para comparar verses de um mesmo arquivo (veja
Captulo ??) e para gerar arquivos de patch (veja seo ??).
Prottipo e parmetros do diff:diff [opes] Arq1 Arq2
-b Ignora espaos em branco.-c Gera sada mostrando os 2 arquivos e as diferenas.-i Ignora diferenas entre maisculas e minsculas.-q Apenas informa se os arquivos so iguais ou diferentes.-r Compara diretrios recursivamente.-v Mostra verso do diff.-xpattern Quando compara diretrios, considerar arquivos com a extenso pattern.-u Formato unificado (+ claro).
Veja a seguir o arquivo e06a-hello.cpp, um programa simples em C++.Listing 3.1: Arquivo e06a-hello.cpp.
#include
int main(){
std::cout
CAPTULO 3. OS PROGRAMAS DIFF, PATCH, INDENT 31
O arquivo e06a-hello.cpp foi modificado e salvo como e06b-hello.cpp. Veja a seguir o arquivoe06b-hello.cpp, observe que foram acrescentadas 4 linhas novas e o return foi alinhado.
Listing 3.2: Arquivo e06b-hello.cpp.#include
int main(){
std::cout
CAPTULO 3. OS PROGRAMAS DIFF, PATCH, INDENT 32
! int x;! cin>>x;! std::cout
CAPTULO 3. OS PROGRAMAS DIFF, PATCH, INDENT 33
Prottipo e parmetros do patch:patch [-u-v] arquivoAntigo arquivoDiferencas.
-u O arquivo das diferenas foi gerado usando a verso unificada (opo -u no diff).-v Mostra verso do programa patch.
Dados os arquivos arq1.cpp, arq2.cpp e o arquivo das diferenas gerado pelo diff, voc pode atualizaro arquivo arq1.cpp de forma que o mesmo tenha o mesmo contedo do arq2.cpp. Veja o exemplo.
Exemplo:diff arq1.cpp arq2.cpp > diferencas.cpp//Vai modificar o arq1 e o mesmo ficar igual a arq2patch arq1.cpp diferencas.cpp
Ou seja, o programa patch junta os arquivos arq1.cpp e diferencas.cpp criando o arquivo arq2.cpp.
3.3 O programa indentO programa indent usado para deixar o cdigo organizado, atravs do uso de padres de in-
dentao. Existe um padro default, pr-estabelecido, mas voc pode definir os padres a seremutilizados. Veja a seguir o prottipo de uso do indent. Lista-se, de forma abreviada, algumas dasopes que podem ser passadas para o indent. Estes parmetros podem ser armazenados no arquivo.indent.pro.
Prottipo:indent file [-o outfile ] [ opes ]indent file1 file2 ... fileN [ opes ]
-st Envia sada para tela.-gnu Usa opes de formatao da GNU.-orig Usa opes de formatao da Berkeley.-v Modo verbose.-l60 Limita a 60 colunas.-bad Linha em branco aps declaraes (Para desativar, -nbad).-bap Linha em branco aps definies de funes (-nbap).-bbb Linha em branco antes de uma caixa de comentrio.-sc Comentrios no estilo de C /* * */.-bl5 Colchetes do bloco alinhados a 5 caracteres.-bn Bloco alinhado.-bli5 Bloco alinhado com 5 espaos.-bls Alinha o par{ }.-cli2 Bloco switch alinhado com espao 2.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 3. OS PROGRAMAS DIFF, PATCH, INDENT 34
-npcs Sem espao entre o nome da funo e o ().-cs Espao depois do cast.-di16 Indenta nome dos objetos em 16 espaos.-bfda Quebra argumentos da funo em vrias linhas.-lp Alinha parmetros de funes com nomes grandes.
O programa ex-vector-1.cpp apresentado na seo ??, foi modificado com o programa indent com ocomando:
Exemplo:cp ex-vector-1.cpp ex-vector-1-indent.cppindent ex-vector-1-indent.cpp
veja a seguir a listagem do arquivo ex-vector-1-indent.cpp. Compare esta listagem com a listagem ??.Observe a mudana na declarao da funo main, na forma do do..while e nas indentaes.
Listing 3.6: Arquivo ex-vector-1-indent.cpp.//Classes para entrada e sada#include
//Classe pra formatao de entrada e sada#include
//Classe de vetores, do container vector#include
//Classe para algoritimos genricos//#include
//Define estar usando espao de nomes stdusing namespace std;
//Definio da funo mainintmain (){//Cria vector, do tipo int, com nome vvector < int >v;
int data;cout
CAPTULO 3. OS PROGRAMAS DIFF, PATCH, INDENT 35
while (cin.good ());
//Acessa partes do vector usando funes front e backcout
Captulo 4
Compilando com gcc, g++
Neste captulo apresenta-se o compilador gcc/g++ da GNU. O mesmo pode ser baixado no siteda gnu individualmente, ou como parte do pacote do EGCS (que inclui um conjunto de programasacessrios).
4.1 Prottipo e parmetros do gcc/g++Apresenta-se aqui o prottipo e os parmetros que voc pode passar para o compilador da gnu.
Posteriormente, atravs dos exemplos, voc compreender melhor cada parmetro.
Prottipo do gcc/g++:g++ [opes] [parmetros] arquivos.
-v Mostra detalhes da compilao.-wall Mostra todos os warnings.-onome Define o nome do arquivo de sada (opcional).-w Elimina mensagens de warning.-I/path Acrescenta path include.-l/path/lib Inclue biblioteca (lib).-ggdb Informaes extras para o gdb.-O Otimiza o cdigo (-O1,-O2,-O3).-c Somente compila (gera o arquivo *.o).-S Somente compila o arquivo, no linka.-lcomplex Inclue biblioteca dos complexos.-lm Inclue biblioteca matemtica.-E Cria somente o arquivo pr-processado.-C No inclue comentrios no executvel.-g Gera informaes para o debuger (cdigo lento).-qdigraph Adiciona teclas dgrafas.
36
CAPTULO 4. COMPILANDO COM GCC, G++ 37
-qcompact Deixa o cdigo mais compacto.-xlinguagem Especifica a linguagem (C, C++,assembler).-p Informaes para o profiler proff.-pg Informaes para o groff.-m686 Especifica que a mquina alvo um 686.-static Especifica que a linkagem deve ser esttica.-p Especifica incluso de instrues para o profiler.-pg Especifica incluso de instrues para o profiler da gnu (gprof).
4.2 Arquivos gerados pelo gcc/g++A medida que os arquivos so compilados e linkados, so gerados alguns arquivos adicionais.
Lista-se a seguir os arquivos de entrada (*.h, *.cpp) e os arquivos de sada gerados pelo g++.
*.h Arquivos header.
*.i Arquivos de pr-processamento para programas em C.
*.ii Arquivos de pr-processamento para programas em C++.
.c,.cc,.C,.c++,.cpp, Arquivos de fonte.
.o Arquivo objeto.
.s Arquivo assembler.
.a Arquivo de biblioteca esttica.
.sa Blocos de bibliotecas estticas linkados ao programa.
.so.n Arquivo de biblioteca dinmica.
a.out Arquivo de sada (executvel).
4.3 Exemplo de uso do gcc/g++Apresenta-se a seguir um exemplo bsico.
1. Edita o programa hello.cpp com o emacs.Abra um terminal e execute emacs hello.cpp.
#include using namespace std;int main(){cout < < hello! < < endl;
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 4. COMPILANDO COM GCC, G++ 38
return; }/*No emacs use ctrl+x ctrl+s para salvar o arquivoe ctrl+x ctrl+q para sair do emacs*/
2. Cria o arquivo de pr-processamento [opcional].
g++ -E hello.cpp
3. Compila o mdulo hello (gera o hello.o).
g++ -c hello.cpp
4. Linka o programa e gera o executvel.
g++ -ohello hello.o
5. Executa o programa.
./hello
6. Observe que os passos 2, 3 e 4 podem ser executados usando:
g++ -v -ohello hello.cpp
O -v mostra um conjunto de informaes a respeito dos passos da compilao.Neste exemplo o nome do programa executvel hello e foi especificado com a opo -ohello. Se
voc no especificar um nome, o programa executvel se chamar a.out.
Tarefa: Compare o tamanho dos cdigos (dos executveis) gerados com as opes:
g++ hello.cpp #comumg++ -g2 hello.cpp #com debugerg++ -o3 hello.cpp #com otimizao
4.4 Sentenas para o compilador da gnu Para conhecer em detalhes o gcc baixe o manual do gcc no site da gnu.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 5
Make
No captulo anterior voc aprendeu a usar o g++ para compilar um programa, como voc podeconstatar, fcil. Mas se seu programa for grande, voc vai ter de executar o g++ para cada arquivo*.cpp, o que se transforma em trabalho tedioso.
Para evitar este trabalho, foram desenvolvidos os arquivos de projeto. Neste captulo vamos des-crever o que , como escrever e como usar arquivos de projeto e o programa make.
5.1 Um arquivo de projeto1Um arquivo de projeto permite a compilao de diversos arquivos com uso do programa make.
Voc pode compilar seus programas diretamente (digitando a instruo de compilao), ouusando arquivos makefile.
Um arquivo makefile um arquivo de projeto no formato ASCII, que pode ser editado emeditores simples, como o emacs.
Por padro, um arquivo de projeto makefile tem o nome makefile ou Makefile. Um arquivo de projeto pode ser simples ou complexo, vai depender do tamanho do programa e
dos recursos utilizados.
Podemos criar um arquivo Makefile com instrues de compilao. Estas instrues de compilaosero lidas e executadas pelo programa make, automatizando a compilao de programas complexos.Descreve-se a seguir como funciona o programa make.
5.2 Prottipo e parmetros do makeApresenta-se a seguir o prottipo e os parmetros do programa make. Por padro, o make procura
no diretrio corrente o arquivo makefile e depois o arquivo Makefile. A opo -f usada para passaro nome do arquivo makefile.
1Um arquivo de projeto do Borland C++ e do MFC tem um formato proprietrio, que s pode ser lido por estesprogramas. Um arquivo de projeto do kdevelop um arquivo ASCII, podendo ser editado em qualquer editor simples.
39
CAPTULO 5. MAKE 40
Prottipo do make:make [ -f arq_makefile ] [ opes ] ... alvos ...-e Indica variveis do ambiente que devem prevalecer sobre atribuies feitas no
make.-k Desconsiderar erros.-n Apenas lista os comandos, sem execut-los.-p Imprime alguns resultados.-r Despreza regras intrnsecas.-t Atualiza data e hora.-s Modo silencioso.-f arq_makefile Especifica o nome do arquivo makefile.
5.3 Formato de um arquivo MakefileBasicamente, um arquivo makefile dividido em uma parte com definies de variveis e outra
parte com sub-rotinas a serem executadas.A primeira parte define variveis a serem utilizadas. As variveis incluem o nome do compilador,
as paths de incluso de arquivos e bibliotecas e listagens de arquivos a serem processados.
5.3.1 Criando variveis em um arquivo MakefileO make aceita que voc defina variveis em seu arquivo makefile e depois use estas variveis nas
etapas de compilao.No exemplo a seguir cria uma varivel e usa seu contedo. Observe que para obter o valor da
varivel voc deve usar um $(). Ao usar $(VARIAVEL), o make substitue o nome da varivel peloseu valor.
Exemplo:NOMEVARIAVEL = valor$(NOMEVARIAVEL)
Por conveno, as variveis definidas em um arquivo makefile so todas maisculas. Voc pode criar variveis da forma
CC = g++
E a seguir modificar seu valor, acrescentando algo em modo append
CC += -O2
2Make usa um conjunto de variveis com nomes pr-definidos.AR Especifica o programa de manuteno de arquivos.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 5. MAKE 41
CC Especifica o compilador, default=cc.CPP Especifica o pr-processador C++.RM Programa de remoo de arquivos, default = rm -f .CFLAGS Flags que devem ser passados para o compilador C.CPPFLAGS Flags que devem ser passados para o compilador C++.LDFLAGS Flags que devem ser passados para o linker.
5.3.2 Criando alvos em um arquivo MakefileA segunda parte de um arquivo makefile contm alvos a serem executados. O formato padro para
um alvo dado por:
Prottipo de um alvo:alvo: DependnciasInstrues a serem executadas
As instrues a serem executadas iniciam com um tab (e no 8 espaos). Geralmente o alvo o nome de um arquivo, uma biblioteca ou um programa a ser compilado. Alvos usuais em arquivos makefile so:
all Executar todas as dependncias.install Instalar o programa.uninstal Desinstalar o programa.dist Gerar uma distribuio no formato .tar.gz.check Verificar a consistncia da instalao.clean Eliminar arquivos temporrios (*.obj).
5.4 Exemplo de um arquivo MakefileVeja na listagem a seguir um exemplo de arquivo makefile.
Listing 5.1: Arquivo makefile.#Toda linha comeada com # uma linha de comentrio#--------------------------------------------------#ParteI: Definio de variveisARQUIVOS=e06a -hello.cppOBJETOS=e06a -hello.oDIRINCLUDE = -I/usr/include/g++ -I/usr/includeDIRETORIOLIB =PARAMETROSLIB = -lmCOMPILADOR = g++
#--------------------------------------------------
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 5. MAKE 42
#Parte II: alvos#all o alvo , e06a -hello.o e e06a -hello so as dependncias
all : e06a -hello.o e06a -hello
#e06a -hello.o o alvo , $( ARQUIVOS) so as dependncias#e $( COMPILADOR) .. a instruoe06a -hello.o : $(ARQUIVOS)
$(COMPILADOR) -c $(ARQUIVOS) $(DIRINCLUDE) $(DIRECL) -o e06a -hello.o
e06a -hello : $(OBJETOS)$(COMPILADOR) $(OBJETOS) $(DIRINCLUDE) $(DIRETORIOLIB) $(PARAMETROSLIB)
-o e06a -hello
clean :rm -f *.o *.obj
Veja na listagem a seguir uma seqencia de execuo do programa make usando o arquivo make-file listado em ??.
Listing 5.2: Exemplo de uso do programa make.//Limpa os arquivos anteriores[andre@mercurio Cap-GNU]$ make cleanrm -f *.o *.obj
//Compila o arquivo e06a -hello.o[andre@mercurio Cap-GNU]$ make e06a -hello.og++ -c e06a -hello.cpp -I/usr/include/g++ -I/usr/include -o e06a -hello.o
//Gera o programa executvel[andre@mercurio Cap-GNU]$ make e06a -hellog++ e06a -hello.cpp -I/usr/include/g++ -I/usr/include -lm -o e06a -hello
//Veja abaixo que o make no compila novamente o que esta atualizado[andre@mercurio Cap-GNU]$ make e06a -hellomake: e06a -hello est atualizado.
//Limpando os arquivos obj[andre@mercurio Cap-GNU]$ make cleanrm -f *.o *.obj
//Observe abaixo que o alvo e06a -hello chama o alvo e06a -hello.o[andre@mercurio Cap-GNU]$ make e06a -hellog++ -c e06a -hello.cpp -I/usr/include/g++ -I/usr/include -o e06a -hello.og++ e06a -hello.cpp -I/usr/include/g++ -I/usr/include -lm -o e06a -hello
Dica: Observe a forma como os alvos foram traduzidos.O alvo:e06a -hello : $(ARQUIVOS) $(OBJETOS)
$(COMPILADOR) $(ARQUIVOS) $(DIRETORIOINCLUDE) $(DIRETORIOLIB) $(PARAMETROSLIB) -o e06a -hello
Foi traduzido da forma:g++ e06a -hello.cpp -I/usr/include/g++ -I/usr/include -lm -o e06a -hello
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 5. MAKE 43
5.5 Sentenas para o make Para conhecer em detalhes o make baixe o manual do make no site da gnu
(http://www.gnu.org). Os arquivos especificados nas dependncias devem existir. Se no existirem vai acusar erro. Os arquivos de cabealho *.h tambm devem ser includos nas dependncias. Isto evita a men-
sagem de erro do compilador pela falta dos mesmos.
Make inteligente, se voc pediu para executar o alvo 2 e este depende do alvo 1, o makeexecuta primeiro o alvo 1 e depois o alvo 2.
Se alguma dependncia sofre modificaes, o make recompila os arquivos que foram modifica-dos.
Alvos sem dependncia no so automaticamente executados. Ao editar um arquivo makefile ou Makefile no emacs, o mesmo aparece com sintaxe especial.
Auxiliando a implementao do arquivo makefile.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 6
Bibliotecas
Apresenta-se neste captulo um conjunto de programas auxilares que so utilizados para mon-tagens de bibliotecas no mundo GNU/Linux. A seguir apresenta-se um exemplo de montagem debiblioteca esttica e um exemplo de montagem de biblioteca dinmica.
6.1 Introduo a montagem de bibliotecasUma biblioteca uma coleo de objetos (funes, classes, objetos) agrupados em um nico ar-
quivo. De um modo geral, um conjunto de arquivos com a extenso *.o, so reunidos para gerar umarquivo libNome.a (para biblioteca esttica) ou libNome.so (para biblioteca dinmica). O GNU/Linuxtem um conjunto de programas auxiliares que so utilizados para criar, manter e gerenciar bibliotecasestticas e dinmicas. Apresenta-se a seguir uma breve descrio destes programas. Para obter infor-maes detalhadas de cada programa d uma olhada no man page ou nos manuais dos programas (osmanuais podem ser baixados no site da gnu (http://www.gnu.org)).
6.1.1 arO programa ar utilizado para manipular arquivos em um formato bem estruturado. O ar tambm
cria tabelas com smbolos e referncias cruzadas. O programa ar que aglutina todos os objetos emuma lib, isto , agrupa os arquivos *.o em uma lib. Veja a seguir o prottipo e um exemplo de uso doar.
Prottipo e parmetros do ar:ar [opes] arquivos.
-t Lista os objetos da lib (biblioteca).-r Substitue funes quando necessrio (arquivos antigos).-q Adiciona no modo apend.-s Atualiza a tabela de smbolos.-c Cria o arquivo se este no existe.-v Modo verbose.
44
CAPTULO 6. BIBLIOTECAS 45
Exemplo:ar cru libNome.a arq1.o arq2.o arq3.o
Neste exemplo o programa ar vai juntar os arquivos arq1.o arq2.o arq3.o e gerar o arquivo libNome.a.Veja a seguir a lista completa de opes do comando ar. A mesma pode ser obtida em seu sistema
digitando ar - -help.
Listing 6.1: Sada do comando ar - -help.Usage: ar [-X32_64] [-]{dmpqrstx}[abcfilNoPsSuvV] [member -name] [count] archive -
file file...ar -M [
CAPTULO 6. BIBLIOTECAS 46
6.1.3 nmMostra os smbolos da biblioteca.
Prottipo e parmetros do nm:nm [opes] arquivo.
-C |demangle Mostra nomes de forma clara para o usurio.-S |print-armap Imprime ndice dos smbolos.Exemplo:nm libNome.a
Use o comando nm - -help para obter as opes do comando nm.
Listing 6.2: Sada do comando nm help .Usage: nm [OPTION ]... [FILE]...List symbols from FILEs (a.out by default).
-a, --debug -syms Display debugger -only symbols-A, --print -file -name Print name of the input file before every symbol-B Same as --format=bsd-C, --demangle[={auto ,gnu,lucid ,arm ,hp,edg ,gnu -v3,java ,gnat ,compaq}]
Decode low -level symbol names into user -level names--no-demangle Do not demangle low -level symbol names--demangler=
Set dso and demangler function-D, --dynamic Display dynamic symbols instead of normal symbols
--defined -only Display only defined symbols-e (ignored)-f, --format=FORMAT Use the output format FORMAT. FORMAT can be bsd ,
sysv or posix . The default is bsd -g, --extern -only Display only external symbols-h, --help Display this information-l, --line -numbers Use debugging information to find a filename and
line number for each symbol-n, --numeric -sort Sort symbols numerically by address-o Same as -A-p, --no-sort Do not sort the symbols-P, --portability Same as --format=posix-r, --reverse -sort Reverse the sense of the sort-s, --print -armap Include index for symbols from archive members
--size -sort Sort symbols by size-t, --radix=RADIX Use RADIX for printing symbol values
--target=BFDNAME Specify the target object format as BFDNAME-u, --undefined -only Display only undefined symbols-V, --version Display this program s version number-X 32_64 (ignored)
nm: supported targets: elf32 -i386 a.out -i386 -linux efi -app -ia32 elf32 -littleelf32 -big srec symbolsrec tekhex binary ihex trad -core
Report bugs to bug-binutils@gnu.org and and hjl@lucon.org.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 47
6.1.4 objdumpImprime informaes sobre as bibliotecas e objetos.
Prottipo e parmetros do objdump:objdump [opes][parmetros]
-d, -debugging.-syms Tabela de smbolos.-a Informaes arquivo.
Exemplo:objdump -file-header file.o
Dica: Para maiores detalhes, execute objdump - -help.
6.1.5 lddLista as bibliotecas dinmicas que determinado programa usa.
Prottipo e parmetros do ldd:ldd [-d-r] programa
- -help Imprime um help.- -version Imprime a verso do ldd.-d,- -data-relocs Processa uma realocao dos dados.r,- -function-relocs Processa uma realocao dos dados e funes.-v,- -verbose Imprime informaes em geral.
Exemplo:ldd /bin/netscape
Veja a seguir a sada do comando ldd /usr/bin/lyx. Lembre-se que LYX o editor utilizado para montaresta apostila. Observe o uso das bibliotecas libXForms, Xpm, X11 e libstdc++.
Listing 6.3: Sada do comando ldd /usr/bin/lyx.libforms.so.0.88 => /usr/lib/libforms.so.0.88 (0 x40032000)libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0 x400b4000)libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0 x400c3000)libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0 x400cc000)libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0 x400e3000)libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0
x401d9000)libm.so.6 => /lib/i686/libm.so.6 (0 x4021c000)libc.so.6 => /lib/i686/libc.so.6 (0 x4023f000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0 x40000000)
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 48
6.1.6 ldconfigO programa ldconfig determina os links necessrios em tempo de execuo para bibliotecas com-
partilhadas (shared libs)1 .Prottipo e parmetros do ldconfig:
ldconfig [-p-v]libs-p Mostra bibliotecas compartilhadas.-v Modo verbose.
6.2 Conveno de nomes para bibliotecas O nome de uma biblioteca deve iniciar com lib. A extenso ser *.a para bibliotecas estticas. A extenso ser *.so para bibliotecas dinmicas. Verses:
libNome.so.VersoMaior.VersoMenor.PatchA verso maior uma verso incompatvel com as demais.A verso menor inclue novidades.A patch inclue correes de bugs.
Uma biblioteca que tem o nome encerrado com -g contm instrues de debugagem. Uma biblioteca que tem o nome encerrado com -p contm instrues para o profiler (gprof).
6.3 Bibliotecas usuaisApresenta-se na Tabela ?? algumas bibliotecas usuais.
6.4 Montando uma biblioteca esttica (libNome.a)Para utilizar a biblioteca o programador precisa dos arquivos com o cabealho (formato como os
objetos e as funes foram construdos) e o arquivo da lib.Seqencia para criar uma biblioteca esttica no GNU/Linux:
1. Cria o arquivo de cabecalho *.h (declarao das funes em C e das classes em C++)
emacs Tponto.hTPonto.h class TPonto { .....};//ctrl+x ctrl+s para salvar//ctrl+x ctrl+c para sair
1Descrito no livro Linux Unleashed, no disponvel em minha mquina.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 49
Tabela 6.1: Bibliotecas usuais.
Biblioteca Include UsolibGL.so Interface para OpenGLlibjpeg.so Interface para arquivos jpeglibpbm.so Interface para bitmaps monocromticoslibpgm.so Interface para bitmaps tons de cinzalibpng.so Interface para arquivos portable bitmap formatlibpnm.so Interface para bitmaps pbm, ppm, pgm
libpthread.so Posix Threadslibvga.so Acesso a tela vgalibz.so Biblioteca para compactao de arquivosglibc Biblioteca padro C
magick++ Biblioteca grfica
2. Cria o arquivo de cdigo *.cpp (definio das funes)
emacs TPonto.cpp/*Define funes da classe*/ ....
3. Compila os arquivos de cdigo (*.cpp) gerando os arquivos (*.o)
g++ -c TPonto.cpp
4. Cria a biblioteca (a lib)
ar -q libNome.a TPonto.o
5. Publica a biblioteca com
ranlib libTPonto.a
Observe que os tens 1 e 2 se referem a edio dos arquivos do programa. Em 3, o programa com-pilado. Pode-se utilizar um arquivo makefile para automatizar esta tarefa. Em 4, cria-se a biblioteca,gerando-se o arquivo libTPonto.a. Em 5 a biblioteca publicada no sistema.
6.4.1 Usando uma biblioteca estticaNo exemplo a seguir compila o programa Prog.cpp e pede para linkar em modo esttico (-static)
a biblioteca nomeLib que esta localizada em pathLib.
Exemplo:g++ Prog.cpp -static -LpathLib -lnomeLib
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 50
6.5 Montando uma biblioteca dinmica (libNome.so)Roteiro para criar uma biblioteca dinmica no GNU/Linux:
1. Cria o arquivo de cabecalho *.h (declarao das funes e classes)
emacs TPonto.hclass TPonto { .....};
2. Cria o arquivo de cdigo *.cpp (definio das funes)
emacs TPonto.cpp/*Define funcoes da classe*/
3. Compila os arquivos de cdigo (*.cpp) gerando os arquivos *.oA opo -fPIC, gera o cdigo com posicionamento independente, podendo o mesmo ser carre-gado em qualquer endereo.
g++ -fPIC -c TPonto.cpp -o TPonto.o
4. Cria a biblioteca dinmicaA opo -WL passa informaes para o linker ld.
g++ -shared -Wl,-soname,TPonto.so.1 -o libTPonto.so.1.0 TPonto.o
5. Copia a lib para /usr/local/lib (como root)
cp libTPonto.so.1.o /usr/local/lib
6. Pode-se criar links simblicos para a lib
cd /usr/local/lib/ln -s libTPonto.so.1.o libTPonto.so.1ln -s libTPonto.so.1.o libTPonto.so
7. Publica a lib(#inclue na tabela de bibliotecas dinmicas, cria link, e inclue em /etc/ld.so.cache)
/sbin/ldconfig
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 51
6.5.1 Usando uma biblioteca dinmicaO exemplo ilustrado a seguir inclue o arquivo #include , um arquivo de incluso de
bibliotecas dinmicas. Veja no exemplo outras informaes (extrado da fonte [5]).#include #include ....main(){//Cria ponteiro para a libvoid* ptrLib;//Cria ponteiro para funo da libvoid (*ptrFuncaoLib)();//Carrega a lib//dlopen(const char* fileName, int flag);ptrLib = dlopen("nomeLib.so.1.0",RTLD_LAZY);//Verifica se no tem erro com a funo dlerror//const char* dlerror();cout < < dlerror();//Obtm endereo da funo//void* dlsym(void* handle,char* simbolo);ptrFuncaoLib = dlsym(ptrLib,"NomeFuncaoNaLib");//Usa a funoint x = (*ptrFuncaoLib)();//Fecha a lib//int dlclose(void * handle);dlclose(ptrLib);}
6.5.2 Vantagens/desvantagens da biblioteca dinmica Em uma biblioteca esttica o programa maior porque inclue todas as bibliotecas. Quando o programa linkado com bibliotecas dinmicas, o mesmo fica menor, pois as biblio-
tecas so carregadas em tempo de execuo.
Um programa que faa uso de uma biblioteca dinmica no precisa ser recompilado se ocor-reram modificaes na biblioteca. S ser necessrio modificar o programa que acessa a bi-blioteca dinmica se o mesmo utilizar objetos da biblioteca que sofreram modificaes na suainterface.
Veja a seguir um arquivo makefile para gerar o programa e87-Polimorfismo.cpp, anteriormente apre-sentado. Parte da listagem inclue instrues para o programa libtool que ser apresentado no Captulo??.
Listing 6.4: Arquivo makefile com bibliotecas estticas e dinmicas.#============================== DEFINICOES ==================================ARQUIVOS= e87-TCirculo.cpp e87-TElipse.cpp e87 -TPonto.cpp e87 -Polimorfismo.
cpp
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 52
OBJETOS= e87-TCirculo.o e87-TElipse.o e87 -TPonto.oDIRINCLUDE = -I/usr/include/g++ -I/usr/includeDIRLIBD = /home/andre/Andre/ApostilasPessoais/ApostilaProgramacao/Exemplos/
cursocpp/Cap-GNU/bibliotecaPARAMETROSLIB= -lmCOMPILADOR = g++LIBS = TPontoLIBD = TPontoPROG = e87-Polimorfismo.cpp
#---------------Lista de opes.#list:# "obj: Gera objetos comuns# exe: Gera executvel comum"# all: obj exe# libs: Gera biblioteca esttica# exes: Gera executvel usando biblioteca esttica# alls: libs exelibs# libd: Gera biblioteca dinmica# exed: Gera executvel usando biblioteca dinmica# libs_libtool: Gera biblioteca estatica usando lib_tool# exes_libtool: Gera executvel usando biblioteca estatica e libtool# init_doc: Inicializa o doxygem# doc: Gera documentao a partir de cdigo documentado# clean: Apaga arquivos "
#---------------Compilao padroall : obj exe
obj : $(ARQUIVOS)$(COMPILADOR) -c $(ARQUIVOS) $(DIRINCLUDE) $(DIRECL)
exe : $(PROG) $(OBJETOS)$(COMPILADOR) $(PROG) $(OBJETOS) $(DIRINCLUDE) $(DIRETORIOLIB) $(
PARAMETROSLIB) -o e87-Polimorfismo
#---------------Criando biblioteca estticaalls : libs exelibs
libs : $(OBJETOS)ar -q libTPonto.a $(OBJETOS)
#ar -cru libTPonto.a $(OBJETOS)ranlib libTPonto.a #publica a lib
#Criando executavel usando a biblioteca estticaexelibs : libs
$(COMPILADOR) e87-PolimorfismoStatic.cpp -static -L. -l$(LIBS) -o e87-PolimorfismoStatic
#---------------Criando biblioteca dinmicaalld : objd libd
objd : $(ARQUIVOS)$(COMPILADOR) -fPIC -c $(ARQUIVOS) $(DIRINCLUDE) $(DIRECL)
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 53
libd : $(OBJETOS)$(COMPILADOR) -shared -Wl,-soname ,TPonto.so.1 -o libTPonto.so.1.0 $(
OBJETOS)ln -s libTPonto.so.1.0 libTPonto.so.1ln -s libTPonto.so.1.0 libTPonto.so/sbin/ldconfig #publica a biblioteca (como root)
#---------------Criando executavel usando a biblioteca dinmicaexelibd : e87-PolimorfismoDinamic.cpp libd
$(COMPILADOR) e87-PolimorfismoDinamic.cpp -L$(DIRLIBD) -l$(LIBD) -o e87-PolimorfismoDinamic
#---------------Limpeza.clean :
rm -f *.o *.obj *.so* a.out e87 -PolimorfismoDinamic e87 -PolimorfismoStatic *.*~ *~ libTPonto.*
#============================== USANDO LIBTOOL ==========================#Para ficar portvel , todas as etapas devem ser realizadas com o libtool#obj_libtool : $(ARQUIVOS)# libtool $(COMPILADOR) -c $(ARQUIVOS)
#---------------Criando biblioteca estatica usando o libtoollibs_libtool: $(ARQUIVOS)
libtool $(COMPILADOR) -o libTPonto.a $(ARQUIVOS)
#---------------Criando executavel usando libtool com biblioteca estatica#Incompletoexes_libtool: e87-PolimorfismoStatic.cpp libs_libtool
libtool $(COMPILADOR) e87-PolimorfismoStatic.cpp -static -L. -l$(LIBS) -o e87-PolimorfismoStatic -libtool
#---------------Criando biblioteca dinmica usando o libtoollibd_libtool: $(ARQUIVOS)
libtool $(COMPILADOR) -o libTPonto.la $(ARQUIVOS)
#---------------Criando executavel usando libtool com biblioteca dinmica#Incompletoexed_libtool: e87-PolimorfismoStatic.cpp libd_libtool
libtool $(COMPILADOR) e87-PolimorfismoDinamic.cppp libTPonto.la -o e87-PolimorfismoDinamic -libtool
#---------------Criando documentao com doxygeminit_doc:
doxygen -g doxygem.config
doc : $(ARQUIVOS)doxygen doxygem.config
Faa cpias do e87-Polimorfismo.cpp criando os arquivos e87-PolimorfismoStatic.cpp ee87-PolimorfismoDinamic.cpp e ento execute a seqencia ilustrada a seguir.
Listing 6.5: Arquivo mostrando o uso do makefile.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 6. BIBLIOTECAS 54
[root@mercurio biblioteca]# make cleanrm -f *.o *.obj *.so* a.out e87-PolimorfismoDinamic e87 -PolimorfismoStatic
*.*~ *~ libTPonto.*
[root@mercurio biblioteca]# make allg++ -c e87-TCirculo.cpp e87-TElipse.cpp e87 -TPonto.cpp e87 -Polimorfismo.cpp -
I/usr/include/g++ -I/usr/includeg++ e87-Polimorfismo.cpp e87-TCirculo.o e87 -TElipse.o e87 -TPonto.o -I/usr/
include/g++ -I/usr/include -lm -o e87 -Polimorfismo
[root@mercurio biblioteca]# make allsar -q libTPonto.a e87-TCirculo.o e87 -TElipse.o e87 -TPonto.oranlib libTPonto.a #publica a libg++ e87-PolimorfismoStatic.cpp -static -L. -lTPonto -o e87 -PolimorfismoStatic
[root@mercurio biblioteca]# make alldg++ -fPIC -c e87-TCirculo.cpp e87 -TElipse.cpp e87 -TPonto.cpp e87 -Polimorfismo.
cpp -I/usr/include/g++ -I/usr/includeg++ -shared -Wl,-soname ,TPonto.so.1 -o libTPonto.so.1.0 e87 -TCirculo.o e87-
TElipse.o e87-TPonto.oln -s libTPonto.so.1.0 libTPonto.so.1ln -s libTPonto.so.1.0 libTPonto.so/sbin/ldconfig #publica a biblioteca (como root)
[root@mercurio biblioteca]# make libs_libtoollibtool g++ -o libTPonto.a e87-TCirculo.cpp e87 -TElipse.cpp e87 -TPonto.cpp e87
-Polimorfismo.cppar cru libTPonto.aranlib libTPonto.a
[root@mercurio biblioteca]# make libd_libtoollibtool g++ -o libTPonto.la e87-TCirculo.cpp e87 -TElipse.cpp e87 -TPonto.cpp
e87-Polimorfismo.cpprm -fr .libs/libTPonto.la .libs/libTPonto .* .libs/libTPonto.*ar cru .libs/libTPonto.alranlib .libs/libTPonto.alcreating libTPonto.la(cd .libs && rm -f libTPonto.la && ln -s ../ libTPonto.la libTPonto.la)
6.6 Sentenas para bibliotecas O padro para o nome da lib : libNome.so.versao.subversao.release. Voc pode acrescentar novas paths para bibliotecas dinmicas modificando a varivel de ambi-
ente LD_LIBRARY_PATH.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 7
Libtool
Neste captulo apresenta-se o libtool, mais um pacote da gnu, utilizado para facilitar o desenvol-vimento de programas em mltiplas plataformas.
7.1 Introduo ao libtool2
Como ser descrito nos captulos seguintes, o libtool mais um programa da gnu que facilita o de-senvolvimento de bibliotecas multiplataforma. O mesmo usado para desenvolvimento de bibliotecasno ambiente GNU/Linux.
Vantagens do uso do libtool
Maior elegncia. Integrado ao autoconf e automake. Maior portabilidade. Trabalha com bibliotecas estticas e dinmicas.
7.2 Forma de uso do libtoolComo fao para usar o libtool ?De um modo geral, basta digitar o comando libtool seguido do comando que voc usaria para
compilar seu programa ou biblioteca.Exemplos de uso do libtool esto listados no diretrio do libtool.Veja a seguir a sada do comando libtool - - help.
Listing 7.1: Arquivo libtool - -help.Usage: libtool [OPTION ]... [MODE -ARG]...
Provide generalized library -building support services.
--config show all configuration variables--debug enable verbose shell tracing
-n, --dry-run display commands without modifying any files
55
CAPTULO 7. LIBTOOL 56
--features display basic configuration information and exit--finish same as --mode=finish --help display this help message and exit--mode=MODE use operation mode MODE [default=inferred from MODE -ARGS]--quiet same as --silent --silent dont print informational messages--version print version information
MODE must be one of the following:
clean remove files from the build directorycompile compile a source file into a libtool objectexecute automatically set library path , then run a programfinish complete the installation of libtool librariesinstall install libraries or executableslink create a library or an executableuninstall remove libraries from an installed directory
MODE -ARGS vary depending on the MODE. Try libtool --help --mode=MODE fora more detailed description of MODE.
7.3 Criando uma biblioteca sem o libtoolReveja a seguir como criar uma biblioteca esttica sem uso do libtool.
Exemplo:ar cru libNome.a a.o b.o c.oranlib libNome.a
Para criar uma biblioteca esttica usando o arquivo makefile anteriormente apresentado execute ocomando:
Exemplo:make cleanmake libs
A sada gerada pelo makefile dada por:
[andre@mercurio libtool-biblioteca]$ make libsg++ -c -o e87-TCirculo.o e87-TCirculo.cppg++ -c -o e87-TElipse.o e87-TElipse.cppg++ -c -o e87-TPonto.o e87-TPonto.cppar -q libTPonto.a e87-TCirculo.o e87-TElipse.o e87-TPonto.oranlib libTPonto.a
7.4 Criando uma biblioteca esttica com o libtoolVeja a seguir como usar o libtool para gerar a biblioteca esttica.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 7. LIBTOOL 57
Exemplo:libtool g++ -o libTPonto.a e87-TPonto.cpp
e87-TElipse.cpp e87-TCirculo.cpp
Veja a seguir a sada gerada pelo libtool.mkdir .libsar cru libTPonto.aranlib libTPonto.a
7.5 Criando uma biblioteca dinmica com o libtoolO mesmo exemplo usando o libtool e biblioteca dinmica. Observe que a nica alterao o nome
da biblioteca, que agora se chama libTPonto.la.
Exemplo:libtool g++ -o libTPonto.la e87-TPonto.cpp
e87-TElipse.cpp e87-TCirculo.cpp
Veja a seguir a sada gerada pelo libtool.rm -fr .libs/libTPonto.la .libs/libTPonto.* .libs/libTPonto.*ar cru .libs/libTPonto.alranlib .libs/libTPonto.alcreating libTPonto.la (cd .libs && rm -f libTPonto.la
&& ln -s ../libTPonto.la libTPonto.la)
7.6 Linkando executveisFormato usual:
Exemplo:g++ -o nomeExecutvel nomePrograma.cpp libNome.la
Formato usando o libtool:
Exemplo:libtool g++ -o nomeExecutvel nomePrograma.cpp libNome.a
7.7 Instalando a bibliotecaFormato usual:
Exemplo://como rootcp libNome.a /usr/libranlib /usr/lib/libNome.a
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 7. LIBTOOL 58
Formato usando o libtool:
Exemplo:libtool cp libNome.a /usr/lib///oulibtool install -c libNome.a /usr/lib/libNome.la//oulibtool install -c .libs/libNome.a /usr/lib/libNome.so.0.0libtool install -c .libs/libNome.a /usr/lib/libNome.lalibtool install -c .libs/libNome.a /usr/lib/libNome.a
7.8 Modos do libtoolPara saber mais sobre o funcionamento de cada um dos mdulos abaixo listados, execute o co-
mando: libtool - -help - -mode = MODO.
Compilao, o libtool atua chamando o compilador do sistema:libtool - -help - -mode=compile
Linkagem, o libtool atua executando a linkagem:libtool - -help - -mode=link
Instalao, o libtool atua instalando o programa:libtool - -help - -mode=install
Execuo, o libtool atua executando o programa:libtool - -help - -mode=execute
Desinstalao, o libtool atua desinstalando o programa:libtool - -help - -mode=uninstall
7.9 Sentenas para o libtool Para executar o gdb com o libtool use:
libtool gdb nomePrograma
Para obter informaes do libtool:
libtool - -help
Para gerar apenas bibliotecas estticas, passar o flag:
--disable-shared
Durante o desenvolvimento costuma-se usar biblioteca esttica com opo de debugagem.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
CAPTULO 7. LIBTOOL 59
Em 9/2001 o libtool ainda no era totalmente compatvel com C++. Leia o livro GNU AUTOCONF, AUTOMAKE, AND LIBTOOL disponvel gratuitamente no
site (http://sources.redhat.com/autobook/). Bibliotecas compartilhadas usam a especificao PIC (position independent code).
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 8
Debug (Depuradores, Debuggers)
Apresenta-se neste captulo informaes sobre o debuger da gnu, o gdb.
8.1 Introduo ao debugerBem, voc um bom programador, mas..., ainda existem alguns probleminhas, e voc ter de
rastrear o seu cdigo para eliminar aqueles pequenos insetos. No adianta, voc vai ter de debugarseu cdigo.
Mas afinal de contas o que e para que serve um debuger ?Um debuger um programa que monitora a execuo de outros programas. Com o debuger voc
pode acompanhar a execuo do programa e identificar onde o mesmo esta com problemas. Para tal,o debuger possibilita a avaliao do contedo das variveis e o acompanhamento passo a passo daexecuo do programa.
O GNU/Linux, Unix tem o gdb, um debug em modo texto e seus frontends o xgdb e o kdbg.Antes de mais nada, para poder debugar o seu cdigo, voc precisa acrescentar as informaes
para o debug passando a opo de compilao -g (CPPFLAGS= -g). Desta forma o gdb poderexaminar o seu executvel (ou o arquivo core) para verificar o que aconteceu.
8.2 Comandos do gbdApresenta-se na Tabela ?? uma lista com os comandos do gdb.
8.3 Exemplo de uso do gdbUm pequeno exemplo de uso do gdb.
Exemplo(gdb) Run //Roda o programa(gdb) backtrace //Mostra a pilha (o ltimo comando executado)(gdb) break 23 //Acrescenta breakpoint na linha 23(gdb) list //Mostra o cdigo fonte perto do breakpoint(gdb) p var //Mostra o contedo da varivel(gdb) c //Continua execuo
60
CAPTULO 8. DEBUG (DEPURADORES, DEBUGGERS) 61
Tabela 8.1: Comandos do gdb.
Comando Aogdb Executa o debuger.
run prog Executa o programa prog.run prog arg Roda o programa com os argumentos.
bt Apresenta um rastreamento da pilha.break func Cria breakpoint na funo func.list arq.cpp Visualiza o arq.cpp.
break 25 (ou b25) Acrescenta breakpoint na linha 25.delete (d) Deleta os breakpoint.
c Continua.step Executa um passo.
step 10 Executa os prximos 10 passos.next Executa uma linha.
next 12 Executa as prximas 12 linhas.print var Imprime o contedo da varivel.
what atributo Mostra contedo do atributo/varivel.quit Abandona o debug.
help com Help sobre o comando.
8.4 Sentenas para o gdb No GNU/Linux, quando um programa trava ou encerrado de forma inesperada, gerado um
arquivo core. O arquivo core pode ser aberto pelo gdb para localizar a posio onde o programatravou.
No gnu voc pode simplificar o trabalho de debugagem incluindo a macro __FUNCTION__que imprime o nome da funo que esta sendo executada.
Exemplo:cout < < na funo : < < __FUNCTION__ < < endl;
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Duarte Bueno
Captulo 9
Profiler (gprof)2
Neste captulo apresenta-se brevemente o gprof, o profiler da gnu.
9.1 Introduo ao gprofUm profiler um programa utilizado para avaliar o desempenho do seu programa, permitindo
encontrar os gargalos (pontos onde o programa demora mais).O profiler apresenta um grfico com o tempo de execuo de cada funo.Primeiro compila o programa incluindo a opo -pg. Criando o executvel a.out que aberto pelo
gprof
g++ -pg ex-funcaoobjeto1.cpp
A seguir executa o gprof
gprof --brief -p
Veja abaixo a sada gerada pelo gprof
[andre@mercurio Cap4-STL]$ gprof --brief -pFlat profile:Each sample counts as 0.01 seconds. no time accumulated% cumulative self self total time seconds seconds calls Ts/call Ts/call name0.00 0.00 0.00 28 0.00 0.00 _Deque_iterator::_S_buffer_size(void)0.00 0.00 0.00 21 0.00 0.00 _Deque_iterator::operator!=(_Deque_iterator const &) const0.00 0.00 0.00 17 0.00 0.00 _Deque_iterator::operator-(_Deque_iterator const &) const0.00 0.00 0.00 15 0.00 0.00 _Deque_base::~_Deque_base(void)0.00 0.00 0.00 14 0.00 0.00 void destroy(int *, int *) 0.
Observe a direita o nome da funo e a esquerda o tempo de execuo.
9.2 Sentenas para o profiler: Para aprender a usar o gprof, baixe e leia o manual do gprof no site da gnu.
62
CAPTULO 9. PROFILER (GPROF)2 63
Se voc quer um compilador mais rpido e usa mquinas com processadores pentium pense emusar o pgcc. Um compilador descendente do compilador da gnu e otimizado para processadorespentium. Procure por pgcc na internet.
Voc s deve se preocupar com performance (e com o gprof) depois que for um bom progra-mador. Primeira faa com que os programas funcionem, a seguir se preocupe com bugs, faa adocumentao,...., depois de tudo se preocupe com a performance.
Apostila de Programao Para Linux/Unix www.lmpt.ufsc.br - Eng. Andr Du
Recommended