Resposta de
removido em 26/06/2006 - 15:04h:
* removido usa Nenhuma
* removido tem conceito: nenhum voto.
Compilando Programas
Muitas pessoas fazem perguntas do tipo: "Dei o make, mas apareceu uma mensagem dizendo de ele não existe" ou "Que que é esse gcc que preciso para compilar o kernel" ou mesmo "O make config diz que não encontrou um tal de target".
Bem, vamos por partes.
1 O básico
A pergunta é: o que você está querendo fazer? Compilar um programa. E o que é compilar um programa?
Compilar é transformar um arquivo legível para o homem (chamado de código-fonte, source file em inglês) para um arquivo legível para a máquina (binário, binary). Quem faz esse trabalho é o compilador.
O código-fonte pode ser escrito usando várias linguagens, mas os mais usados no Linux são as linguagens C e C++. O compilador C/C++ padrão no Linux é o GCC/GPP (e variantes, como o PGCC que é otimizado para processadores Pentium). Até a pouco tempo, existia um compilador chamado EGCS, baseado no GCC. Ele foi criado por um grupo de pessoas que estavam insatisfeitos com o processo de atualização do GCC pela FSF, achando que era muito conservador (lento, em bom português). Mas no começo de 2000, os dois projetos foram novamente unificados com o nome de GCC, ficando a manutenção a cargo do grupo ex-EGCS. Muitas distribuições ainda vêm com o EGCS, mas creio que daqui a pouco todas as distribuições passem a vir com o GCC.
2 E os utilitários...
Muito bem, já sabemos o que é compilar programas e o que usar. E o que é o make?
Se o programa é constituído por vários arquivos, você terá que compilar todos eles e juntá-los (link) corretamente, muitas vezes incluindo bibliotecas (libraries) externos. Para automatizar esse procedimento, normalmente usa-se o comando make. Esse comando lê um arquivo Makefile, onde está determinado o "roteiro" necessário para a compilação do programa.
Aí aparece mais um problema: você quer que esse programa possa ser compilado no Linux, nos *BSD, na Sun, etc, que tem programas/bibliotecas semelhantes mas não idênticos. Ou mesmo no Linux, dependendo da distribuição ou da maneira com que você instalou as bibliotecas, a configuração pode ser diferente (os arquivos podem estar em diretórios diferentes, por exemplo). Portanto, um Makefile que serve para mim pode não servir para você.
O autor do programa poderia escrever um Makefile para cada um desses casos, mas seria um trabalho sem fim! Para isso, criaram um jeito de gerar um Makefile específico para cada sistema, a partir de um roteiro básico que procura os programas e as bibliotecas necessários para a compilação. Esse procedimento é normalmente chamado de "configuração".
Os programas mais utilizados para a configuração são o xmkmf e o autoconf/configure. O kernel Linux não usa esses programas, mas o próprio Makefile cria um arquivo de configuração específico para o seu uso.
3 Bibliotecas e header-files
Com esses programas, você consegue compilar um programeco. Mas só programecos...
Os programas normalmente usam bibliotecas e header-files (não sei direito o que são... acho que são partes do código-fonte reutilizáveis, ao contrário das bibliotecas, que são arquivos binários) externos, pois seria uma bobagem cada um ficar reescrevendo funções que todos os programas usam (algo como a caixa de diálogos do Windows: todos os programas usam o padrão do Windows). O libc (glibc) é uma biblioteca usada por quase todos os programas do Linux; o libjpeg é usada em todos os programas que trabalham com o formato JPEG; e assim por diante.
Aí vem um detalhe a mais: normalmente, essas bibliotecas são divididas em dois pacotes: um para ser usado por programas já compilados (glibc e libjpeg, por exemplo), e um para ser usado na compilação de programas que dependem dele (glibc-devel e libjpeg-devel, por ex.).
Portanto, para compilar programas mais complexos, você precisa ter esses dois pacotes instalados.
4 E o que está faltando?
Muito bem, a pergunta é: como descobrir o que está faltando e causando o erro durante a compilação?
Uma boa leitura nas mensagens de erro já ajuda bastante: se sair um " command not found" ou " comando não encontrado" , deve estar faltando um programa (executável). Normalmente é o gcc ou o make (ou o yacc, ou o as86, ou...), e você consegue "adivinhar" o pacote que está faltando.
Se é uma biblioteca, fica mais complicado pois muitos deles têm nomes bem diferentes do pacote (por exemplo, libXm é do Motif ou Lesstif). Se é um header-file, pior ainda: como é que vou saber onde está o sys/types.h???
Um jeito é vasculhar no CD (usando um "tar ztf" ou "rpm -qpl" com o grep). Mas um pouco de bom-senso ajuda...
1. O glibc-devel é (quase) sempre necessário.
2. Se está compilando um programa para o X, provavelmente o XFree86-devel será necessário.
3. Se no README estiver escrito que o programa usa o Gtk/Qt/Ncurses etc, o pacote "-devel" correspondente será necessário.
4. Por falar em README, sempre leia esse arquivo, juntamente com o INSTALL (se tiver). Mesmo que você não entenda absolutamente nada de inglês, você poderá reconhecer o nome de uma biblioteca. Aí, meu filho, dicionário na mão e mãos à obra...
5. O "make menuconfig" do kernel precisa do ncurses-devel, e o "make xconfig" precisa do tcl e do tk.
5 Resumindo
Resumindo, para se compilar um programa, você precisa de:
* compilador, que na maioria dos casos é o gcc (ou variantes, como o egcs e o pgcc);
* comando make;
* comando xmkmf e autoconf (para configuração);
* talvez algum outro programa;
* bibliotecas básicas do Linux e outras específicas para o programa; e
* o código fonte do programa, é lógico.
Portanto, antes de tentar compilar um programa, certifique-se que você tem todos os ítens acima.
Para finalizar: você precisa rodar o make onde o arquivo Makefile se encontra. Afinal, o make não consegue adivinhar o que você está querendo compilar, não é?
fonte
http://www.comlinux.com.br/docs/comofazer/compilando.shtml