+ Responder ao Tópico



  1. #1

    Padrão Compilando com gcc, g++ Definitivo

    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 )





  2. #2

    Padrão Re: Compilando com gcc, g++ Definitivo

    Cara. Posta isso como tutorial. De preferencia no wiki também. O texto está massa.