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.
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
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
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.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal