Logo Hardware.com.br
Jeanks
Jeanks Tô em todas Registrado
2K Mensagens 45 Curtidas

Tutorial -> Instalação de programas pelo código fonte!

#1 Por Jeanks 05/05/2007 - 22:23
Olá amigos, decidi escrever esse tutorial, pois vejo que é área onde o novato mais quebra a cabeça.
Bom, esse tutorial eu escrevi baseado no Ubuntu ( a distro que estou usando atualmente ) mas pode ser usado para qualquer distro.

1 - O básico
2 - Configure
3 - make
4 - make install
5 - Otimizando o source


1 - O Básico

Bom, compilar o programa envolve tres coisas:
1 - Verificar se o sistema está pronto para compilar e rodar o programa ( configure )
2 - Compilar o Programa
3 - instalar o programa
Antes de começar, nesses pacotes geralmente vem um arquivo texto, chamado readme, leiame, install, etc. Leia . Nesse arquivo geralmente vem instruções para instalação.

No primeiro passo é executado um script, geralmente chamado de "configure". Ele faz um série de testes, verificando dependencias, etc. No final do processo, ele cria um arquivo, chamado "Makefile". É por esse arquivo que o comando "make" se orienta. o make lê o arquivo Makefile, e chama o gcc ou o g++ ( os compiladores, que realmente compilam o programa ) de acordo com as variaveis que ele econtrou no Makefile. Isso inclue aonde estão as dependências, etc.
No terceiro e ultimo passo, o make copia os arquivos compilados para o seus respectivos diretórios. Como esse comando envolve copiar arquivos para fora da pasta HOME, deve ser executado como root .

Descompactando a fonte

Geralmente, as fontes vem compactadas nos formatos gunzip ou bzip2 ( gz ou bz2, respectivamente ). exemplo:
fonte.tar.bz # gunzip
fonte.tar.bz2 #bzip2

O tar é o programa que preserva a ordem dos diretorios dentro do arquivo compactado. e o gunzip e o bzip2 é que fazem a compactação. Por isso da extensão ser tar.bz2.
Para descompactar:

tar -xzvf fonte.tar.gz #para arquivos Gunzip
tar -xjvf fonte.tar.bz2 #Para arquivoz Bzip2

onde:
tar: chamada do programa tar
x : Parâmetro passado ao tar, que significa extract, descompactar
z ou j: Indica que o arquivo está compactado em Gunzip ou Bzip2, respectivamente
v: Verbose, para mostrar quais arquivos estão sendo descompactados
f: Passa o parâmetro do arquivo que será descompactado, por isso é o ultimo argumento antes do nome do arquivo
fonte.tar.gz: O nome do arquivo stick_out_tongue.png


isso irá descompactar o arquivo no diretorio corrente ( se vc não sabe aonde está, execute pwd )

2- O configure

O configure, como foi dito, é ( geralmente ) o nome do arquivo que faz o teste das malditas dependências e cria o Makefile. o script pode ser chamado também, de config ou install.sh
Para chama-lo, entre no diretorio da fonte ( usando o cd ) e execute:
./configure

O "./" é para indicar o shel para executar o script, e o configure é o nome do script.
Geralmente ele começa bem...dai..do nada, ele retorna um erro, como esse:
Check SDL.... error, libsdl not found

Se eu tentar dar o make, ele retornará:
make: *** Nenhum alvo indicado e nenhum arquivo make encontrado. Pare.

Isso é normal, como o configure não terminou direito, não criou o Makefile e o make não por onde se orientar.

Não encontrar dependências é normal, principalmente em distros livecd, como Kurumin e o Ubuntu. Esse tipo de distro, para economizar espaço, inclue apenas os arquivos necessários para rodar o programa ( as libs ), mas não incluem os arquivos necessários para compilar os programas. No Ubuntu, nem os compiladores básicos ( como o gcc )vem instalados, vc tem que instalar usando o comando:
sudo apt-get install build-essential

Resolvendo Dependencias usando Gerenciadores de programas

Eu ensinarei esse passos usando o apt-get, mas pode ser usado facilmente outro gerenciador de pacotes.
Analisando a mensagem de erro que o script me retornou, chego a conclusão de que ele não encontrou a libsdl. Resolver isso é fácil, usando o apt-get ou urpm.

no apt-get:
apt-cache search nome-do-pacote
exemplo:
apt-cache search libsdl
saída:

libsdl-image1.2-dev - development files for SDL 1.2 image loading libray
libsdl-mixer1.2-dev - development files for SDL1.2 mixer library
libsdl-ttf2.0-0 - ttf library for Simple DirectMedia Layer with FreeType 2 support
libsdl-ttf2.0-dev - development files for SDL ttf library (version 2.0)
libsdl1.2debian - Simple DirectMedia Layer
libsdl1.2debian-all - Simple DirectMedia Layer (with all available options)
libsdl1.2debian-alsa - Simple DirectMedia Layer (with X11 and ALSA options)
libsdl1.2debian-esd - Simple DirectMedia Layer (with X11 and esound options)
libsdl1.2debian-oss - Simple DirectMedia Layer (with X11 and OSS options)
libsdl-image1.2 - Biblioteca p/ abertura de imagens para Simple DirectMedia Layer 1.2
libsdl-mixer1.2 - Biblioteca de mixer para Simple DirectMedia Layer 1.2
libsdl1.2-dev - Arquivos de desenvolvimento da Simple DirecMedia Layer.
gstreamer0.8-sdl - SDL videosink plugin for GStreamer
libsdl-console - console that can be added to any SDL application
libsdl-console-dev - development files for libsdl-console
libsdl-erlang - Erlang bindings to the Simple Direct Media Library
libsdl-gfx1.2-4 - drawing and graphical effects extension for SDL
libsdl-gfx1.2-dev - development files for SDL_gfx
libsdl-net1.2 - network library for Simple DirectMedia Layer
libsdl-ocaml - OCaml bindings for SDL - runtime files
libsdl-ocaml-dev - OCaml bindings for SDL - development files
libsdl-pango-dev - text rendering with Pango in SDL applications (development)
libsdl-pango1 - text rendering with Pango in SDL applications (shared library)
libsdl-perl - SDL bindings for the Perl language
libsdl-ruby1.8 - Ruby/SDL interface for Ruby
libsdl-sge - extension of graphic functions for the SDL multimedia library
libsdl-sge-dev - development files for libsdl-sge
libsdl-sound1.2 - Decoder of several sound file formats for SDL
libsdl-sound1.2-dev - Development files for SDL_sound
libsdl-stretch-0-2 - stretch functions for Simple DirectMedia Layer
libsdl-stretch-dev - development files for SDL_stretch library
libsdl1.2debian-arts - Simple DirectMedia Layer (with X11 and aRts options)
libsdl1.2debian-nas - Simple DirectMedia Layer (with X11 and NAS options)
libsdl-net1.2-dev - Arquivos de desenvolvimento para a biblioteca de rede SDL.
lgeneral - A "Panzer General" - like game
Analisando a saída do comando, vemos que temos que instalar o pacote libsdl1.2-dev.
Mas perae, porque não o pacote libsdl1.2debian?
Simples, porque o pacote libsdl1.2debian ( equivalente ao libsdl-1.2 em outros gerenciadores ) contém os arquivos necessários para rodar programas que usam essa lib. Esse pacote não contém os arquivos necessários para compilar programas que usam SDL. Para compilar, precisamos do libsdl1.2-dev . Isso se aplica a qualquer pacote. exemplo:

libgtk2.0-dev e libgtk2.0-0
libcairo2 e libcairo2-dev

Tem "dev" ou "devel" no nome do pacote, pode ter certeza que são as headers para compilação.

3 - comando Make

O make não tem mistério, quando o configure termina corretamente, vc executa no terminal:
make

E vc verá todo o processamento do código fonte.
Raramente acontece erros na hora do make, alguns que ja aconteceram comigo foram: Faltar pacotes que o configure não detectou, quando isso acontecer com vc, use o apt-get.
Outra coisa que pode acontecer, é erro no código fonte, causado por alguma icompatibilidade com a versão das dependencias instaladas em seu PC. Um exemplo, é o amule. O safado não compila usando o WXGTK 2.8.3. Da erro na hora do make. Mas se vc usar a versão 2.6.4, ele compila.
Outro erro que ja aconteceu comigo, foi o "segmentation fault" ( acho que é assim que se escreve ) geralmente ocorria quando eu tentava compilar algum programa, com varios programas abertos.

4 - make install

Esse é fácil. Depois que compilou o programa, é só executar ( como root )
make install

Ele irá copiar todos os arquivos compilados para o diretório de instalação, geralmente o /usr/local , os executaveis vão para o /usr/local/bin, os arquivos de configurão vão para /usr/local/etc e assim por diante.


5 - Otimizando o source

A unica vantagem que vejo em compilar programas, é poder otimizar o source para o seu processador. Por exemplo, os programas que vc instala através do apt-get, vem compilados em i386, ou seja, sem otimização nenhuma. Do urpmi da Mandriva, vem compilados para a arquitetura i586. Para fazer isso, vc deve setar as variaveis CFLAGS CXXFLAGS E CHOST
Exemplo, toda vez que eu compilar um programa, antes de executar o configure eu digito no terminal ( para otimizar para o meu Sempron 2200 ):
CFLAGS="-march=athlon-4 -pipe -O3 -fomit-frame-pointer"
CXXFLAGS=$CFLAGS
CHOST="i686-pc-linux-gnu"
export CFLAGS CXXFLAGS CHOST

Essas variaveis, o ./configure irá pegar o valor, colocará no Makefile, e na hora que vc executar o make , ele irá passar esses valores para os compiladores.

Importante, se vc errar, digitar algum valor errado, o configure retornará erro.
Se você não sabe quais valores colocar para seu processador, procure em http://gentoo-wiki.com/Safe_Cflags que contém uma extensa lista de valores para CFLAGS, é só procurar seu processador.
Outra coisa importante, um programa compilado para Pentium 4 não rodará em um Pentium 3, um programa compilado para atlhon não rodará num Pentium e por ai vai.


Conclusões
Espero com esse tutorial ajudar os iniciantes nessa parte tão chata de compilar programas. Mas vale lembrar, que a maioria dos programas que vc baixa na NET vc pode encontrar facilmente no apt-get, urpmi, yum, pacman, etc.

Gente, se alguem tiver alguma contribuição, me passe, pra poder colocar no tutorial.

Abraços

Ha, desculpem os erros de português.
Responder
Gigabolt
Gigabolt Membro Senior Registrado
285 Mensagens 8 Curtidas
#7 Por Gigabolt
06/05/2007 - 08:03
Leite Estragado disse:

5 - Otimizando o source

A unica vantagem que vejo em compilar programas, é poder otimizar o source para o seu processador. Por exemplo, os programas que vc instala através do apt-get, vem compilados em i386, ou seja, sem otimização nenhuma. Do urpmi da Mandriva, vem compilados para a arquitetura i586. Para fazer isso, vc deve setar as variaveis CFLAGS CXXFLAGS E CHOST
Exemplo, toda vez que eu compilar um programa, antes de executar o configure eu digito no terminal ( para otimizar para o meu Sempron 2200 ):
CFLAGS="-march=athlon-4 -pipe -O3 -fomit-frame-pointer"
CXXFLAGS=$CFLAGS
CHOST="i686-pc-linux-gnu"
export CFLAGS CXXFLAGS CHOST

Essas variaveis, o ./configure irá pegar o valor, colocará no Makefile, e na hora que vc executar o make , ele irá passar esses valores para os compiladores.

Importante, se vc errar, digitar algum valor errado, o configure retornará erro.
Se você não sabe quais valores colocar para seu processador, procure em http://gentoo-wiki.com/Safe_Cflags que contém uma extensa lista de valores para CFLAGS, é só procurar seu processador.
Outra coisa importante, um programa compilado para Pentium 4 não rodará em um Pentium 3, um programa compilado para atlhon não rodará num Pentium e por ai vai...


Ótimo tutorial Leite Estragado! rindo_ate_agora.png

Só tive algumas dúvidas:

Se eu compilar um programa sem usar aquelas váriaveis CFLAGS CXXFLAGS E CHOST, o programa não vai ficar otimizado pro meu computador, tipo, vai ficar que nem um pacote pré-compilado?

Você disse que um programa compilado pra P4 não roda num P3, então se eu compilar o kernel, e colocar meu HD em outro computador com um processador diferente, o sistema não vai funcionar? nao_sei.gif
Kubuntu 8.10
KDE 4.2
Linux User #442905 cool.png
apimente.br
apimente.br Cyber Highlander Moderador
51.1K Mensagens 3.8K Curtidas
#8 Por apimente.br
06/05/2007 - 09:48
Muito bom! Passarei a indicar esse tópico para os que perguntam como compilar programas.
Deveria ser mandado para o SuperDownloads - assim que baixar programas de lá ficaria sabendo o que fazer com o arquivo baixado.
O Linux não é o Windows
Como fazer perguntas inteligentes? Clique aqui!
Ao pedir ajuda, informe sua configuração completa e forneça detalhes suficientes para alguém te ajudar.

Jeanks
Jeanks Tô em todas Registrado
2K Mensagens 45 Curtidas
#9 Por Jeanks
06/05/2007 - 11:26
Gigabolt disse:
Ótimo tutorial Leite Estragado! rindo_ate_agora.png

Só tive algumas dúvidas:

Se eu compilar um programa sem usar aquelas váriaveis CFLAGS CXXFLAGS E CHOST, o programa não vai ficar otimizado pro meu computador, tipo, vai ficar que nem um pacote pré-compilado?

Você disse que um programa compilado pra P4 não roda num P3, então se eu compilar o kernel, e colocar meu HD em outro computador com um processador diferente, o sistema não vai funcionar? nao_sei.gif


Obrigado gente!

Isso mesmo, se vc compilar um programa praa determinado processador, ele passará a usar instruções exclusivas dele, o que fará ele não rodar em outros processadores.

"apimente.br"

Muito bom! Passarei a indicar esse tópico para os que perguntam como compilar programas.
Deveria ser mandado para o SuperDownloads - assim que baixar programas de lá ficaria sabendo o que fazer com o arquivo baixado.


Pois é, a intenção foi justamente essa, ajudar os iniciantes nessa parte. O cara começa a usar Linux, como de costume no Windows, vai no Superdownloads, baixa uma pancada de programas, e não sabe o que fazer com eles.
Eu tinha escrito um tutorial parecido, na época do Fórum Kurumin, e lembro que tinha ajudado bastante o pessoal. Espero que aqui eu consiga ajudar o pessoal tb^^
pflynn
pflynn Ubbergeek Registrado
5.5K Mensagens 122 Curtidas
#12 Por pflynn
07/05/2007 - 19:05
Vou começar a utilizar o alvo abacaxi para instalar os meus programas:

make abacaxi


smile.png

É tudo mera questão de convenção. Geralmente, é muito bom seguir convenções como essa, pois facilita a vida de muita gente. Mas não é obrigatório. Como observou o amigo corvolinoWins:

corvolinoWins

na maioria dos caso é make - make install sim x]



isso porque a maioria dos desenvolvedores segue essa convenção. Eu acho que se não existe um bom motivo para fazer diferente, então adote essa conveção smile.png
------------------------------------------------
Muito bom. Mas tijolo não revida!
------------------------------------------------
zerocow
zerocow Veterano Registrado
1.7K Mensagens 17 Curtidas
#14 Por zerocow
08/05/2007 - 01:04
pflynn disse:
Vou começar a utilizar o alvo abacaxi para instalar os meus programas:

make abacaxi
smile.png

...
isso porque a maioria dos desenvolvedores segue essa convenção. Eu acho que se não existe um bom motivo para fazer diferente, então adote essa conveção smile.png




Hehehe...
vou começar a usar a conveção abacaxi.

kkkk... sério, eu gostei mesmo disso!
vou escrever apartir de jh, os meus makefile, para usar o 'make compila'
kkkkkk... isso para a versão estavel

para as de teste, vou usar o 'make abacaxi' mesmo. kkkk


PS: Sobre o topíco. foi muito bom, principalmente para quem está começando.
Apenas Quem Reinventou a Roda, Sabe o porque dela ser Redonda - DevilF
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal