magnux <[email protected]> "Keep it simple, stupid"
Compilando com gcc, g++ Definitivo
Agora você poder compliar seus programas e exploit's no *nix, sem nenhum problema, usando o GCC.
O gcc/g++ o compilador C/C++ da GNU. Pode ser baixado no site da GNU individualmente, ou como parte do pacote do EGCS
(que inclue um conjunto de programas acessórios).
Proto os protdo gcc/g++:
g++ [opções] [parâmetros] arquivos.
-v
Mostra detalhes da compilação.
-wall
Mostra todos os warnings.
-onome
Define o nome do arquivo de saída (opcional).
-w
Elimina mensagens de warning.
-I/path
Acrescenta path include.
-l/path/lib
Inclue biblioteca (lib).
-ggdb
Informações extras para o gdb.
-O
Optimiza o código (-O1,-O2,-O3).
-c
Somente compila (gera o arquivo *.o).
-S
Somente compila o arquivo, não linka.
-lcomplex
Inclue biblioteca dos complexos.
-lm Inclue
biblioteca matemática.
-E
Cria somente o arquivo pré-processado.
-C
Não inclue comentários no executável.
-g
Gera informações para o debuger (código lento).
Arquivos gerados pelo gcc/g++
-qdigraph
Adiciona teclas dígrafas.
-qcompact
Deixa o código mais compacto.
-xlinguagem
Expecfica a linguagem (C, C++,assembler).
-p
Informações para o profiler proff.
-pg
Informações para o gro_.
-m686
Especifica que a máquina alvo é um 686.
-static
Especifica que a linkagem deve ser esttica.
-p
Especifica inclusão de instruções para o profiler.
-pg
Especifica inclusão de instruções para o profiler da gnu (gprof ).
A medida q os arquivos são compilados e linkados, são gerados alguns arquivos adicionais.
Lista-se a seguir os arquivos de entrada (*.h, *.cpp), e os arquivos de saída 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 estáticas.
.sa
Blocos de bibliotecas estáticas linkados ao programa.
.so.n
Arquivo de biblioteca dinmica.
a.out
Arquivo de saída (executável).
Exemplo de uso do gcc/g++
Exemplo basico:
1. Edita o programa greenpeace.cpp com o emacs.
Abra um terminal e execute emacs greenpeace.cpp
Código :#include <iostream> using namespace std; main() { cout << "Green-Peace!" << endl; } /*No emacs use ctrl+x ctrl+s para salvar o arquivo e ctrl+x ctrl+q para sair do emacs*/
2. Cria o arquivo de pré-processamento [opcional]
g++ -E greenpeace.cpp
3. Compila o módulo hello (gera o greenpeace.o)
g++ -c greenpeace.cpp
4. Linka o programa e gera o executavel
g++ -ohello greenpeace.o
5. Executa o programa
./greenpeace
6. Observe que os passos 2,3 e 4 podem ser executados usando:
g++ -v -ogreenpeace greenpeace.cpp
O -v Mostra um conjunto de informações a respeito dos passos da compilação.
Neste exemplo o nome do programa executável é greenpeace e foi especificado com a opção -ogreenpeace.
Se você não especificar um nome, o programa executável se chamará a.out.
Tarefa: Compare o tamanho dos códigos (dos executáveis) gerados com as opções:
g++ greenpeace.cpp #comun
g++ -g2 greenpeace.cpp #com debuger
g++ -o3 greenpeace.cpp #com otimização
Situções:
Antes de compilar no windows e no linux
windows nome.h/nome.cpp
linux nome.h/nome
Depois de compilar
windows nome.obj
linux nome.o
Depois de linkar
windows nome.exe
linux nome
Ferramentas para programar no linux
_ kylix http://www.borland.com/kylix/index.html. Ambiente com uso da biblioteca VCL (Visual Class Library).
_ Code Warrior Metroworks, ambiente com uso da biblioteca code warrior (?).
_ kdevelop http://www.kdevelop.org/ ambiente completo com uso da biblioteca qt ou kde.
_ qt http://www.trolltech.com, para o desenho de interfaces grficas usando a biblioteca QT.
_ glade http://glade.gnome.org/ q utiliza o tolkit do gtk++ http://www.gtk.org/.
_ dev C++ http://www.bloodshed.net/dev/, ambiente visual pequeno e simples de usar, usa as ferramentas da GNU..
_ Source navigator http://sources.redhat.com/sourcenav/ .
_ Sistema GNU (g++, make, automake, autoconf, libtool). Podem-se desenvolver os programas
Com editores de texto simples e usar o make para compilação automatizada. Tem o cvs para controle de versões.
Observe que usar o sistema GNU garante uma maior portabilidade e uniformidade no desenvolvimento de seus programas, pois está presente em praticamente todas as plataformas.
Quem programa no linux deve saber onde fica o diretório com os programas do sistema e onde ficam localizadas as bibliotecas:
/usr/bin
programas do sistema
/usr/local/bin
programas locais
/usr/include
arquivos include
/urs/lib
bibliotecas
/usr/openwin/lib
bibliotecas do X windows
Programas ulteis para desenvolvimento de software no linux.
Programas utilitrios
Ambientes de desenvolvimento
Ambiente para desenvolvimento no KDE = kdevelop
Ambiente de desenvolvimento semelhante ao Borland = xwpe
Ambiente para desenvolvimento no GNOME = glade
Editor de texto
Editor de texto simples = emacs
Compiladores
Compilador C da GNU = gcc
Compilador C++ da GNU g++
Compilação automatizada = make
Linkagem = ld
Depuração
Depurador C da GNU = gdb
Depurador do KDE (kdevelop) = kdbg
Programas GNU = Compliant
Geração dos scripts de configuração = autoconf
Geração dos scripts Makefile = automake
Pacote de geração de bibliotecas = libtool
Programas Diversos
Traça informações, chamadas a bibliotecas = ltrace
Controle de versões CVS
Formatação do código
Diferenças entre arquivos = diff
Formata o código = bison
Organiza o código (layout) = indent
Analisador léxico = fex,fex++
Documentação
Gera documentação a partir de tags no código. = doxygen
Geração de diagramas de classes = graphviz
Manipulação binária = bfd
Binary _le descriptor = binutil
Pro_le (analizador de desempenho) = gprof
Montagem de bibliotecas = ar
Índices das bibliotecas = ranlib
Informações sobre objetos = objdump
Veja abaixo algumas extenções que você pode encontrar no GCC :
gcc-g77 ( Suporte para Fortran )
gcc-gnat (Suporte para Ada )
gcc-java (Suporte para Java )
gcc-objc (Suporte para Objective-C )