Pular para o conteúdo principal

Marcus VBP

Desenvolvimento Web, Drupal, Ubuntu, Nerdices, e o que mais der na telha...

programação

Tweet

Compilação de #!@ é !&↓@!

Como vocês sabem, sou usuário feliz do Ubuntu, uma distribuição amigável e voltada para o usuário final e uso nos Desktop[bb].

Mas se tem uma coisa que me deixa muito frustado no Linux, é a tal da compilação. Talvez até mais que a falta de Drivers.

Compilação é o seguinte: você baixa os arquivos fontes de um programa, que em geral vêm compactados em formato .tar.gz, e a partir destes fontes, você cria um binário (como é chamado um programa executável compilado), que será otimizado para a configuração do seu computador[bb].

Não é uma tarefa para leigos e novatos, mas também não é tão complicada assim. Na maioria da vezes, se você já tiver um computador bem configurado para a compilação, basta executar os seguintes comandos dentro da pasta com o código-fonte:

$ ./configure
$ make
$ sudo make install

Um pré-requisito básico para a compilação é o pacote build-essential, que você pode instalar pelo comando:

$ sudo apt-get install build-essential

Não é qualquer programa que pode ser compilado. É necessário que o código-fonte do programa esteja disponível.

Compilar tem suas vantagens, como por exemplo:

  • gerar um binário que funcione no seu processador[bb], seja ele de 32 ou 64 bits;
  • ganho de velocidade no programa, já que ele vai ser otimizado para seu computador;
  • você pode personalizar uma aplicação. Por exemplo, o AMSN é um dos clientes para Microsoft MSN Messenger mais conhecidos, e que também é conhecido por não ter a interface bonita. A partir dos fontes, eu posso compilar o AMSN para que ele fique com o anti-aliasing ativado, tornando a aplicação menos... feia.

Contudo, ela também tem suas desvantagens, que ao meu ver, ofuscam totalmente as vantagens:

  1. Nem sempre é fácil. Para compilar alguns programas são necessários bibliotecas especiais. Quando você usa o comando ./configure, o script se encarrega de dizer quais as bibliotecas estão faltando, mas consegui-las é problema seu. Algumas você consegue no Synaptics (Dica: sempre que um programa requisitar um pacote, instale a versão -dev), outras não. Aí você tem que procurar e se necessário compilar essas bibliotecas.
  2. Compilar, na maioria das vezes, é demorado. A demora em compilar um programa é proporcional ao tamanho do código-fonte e à velocidade do processador. Se você estiver compilando o Firefox e tiver um processador mais antigo como o meu (Athlon 900Mhz), sugiro que vá tomar um café ou fazer alguma atividade que não consuma memória e processamento demais, como ler ou jogar paciência.
  3. O ganho de velocidade nem sempre é sensível. Em alguns programas, como o Firefox, é evidente o ganho de velocidade no carregamento do programa. Já no AMSN, não é, pelo menos comigo. De uma maneira geral, o ganho de velocidade da maioria dos programas é irrelevante.
  4. Consome espaço em disco. Quando você vai compilar, você baixa muitas bibliotecas que, se tiver sorte, você nunca mais vai usar. Na maioria das vezes você pode removê-las facilmente pelo Synaptics, mas nem sempre, especialmente quando você instala bibliotecas compiladas. Por exemplo, ontem para instalar um aplicativo de 600kb, eu tive que baixar mais de 50mb de bibliotecas. Esse foi um dos motivos que me levaram a escrever este artigo. Além das bibliotecas, a compilação gera um código de pré-instalação que também consome espaço, mas pode ser removido, usando o comando make clean, dentro da pasta com código compilado.
  5. Algumas vezes não é fácil desinstalar um aplicativo compilado. Alguns programas disponibilizam uma regra para a remoção do aplicativo compilado, e você pode remover o programa usando o comando sudo make uninstall, dentro da pasta que tem o código-fonte do programa (ou seja, se você deletou o código-fonte, vai ter que baixá-lo novamente). Além do mais, se você utilizou o comando make clean para limpar os arquivos gerados pela compilação, você vai ter que compilar o código novamente, usando o comando make. Agora, se o programa não disponibilizar a regra make uninstall, o problema para desinstalar o programa é todo seu, pois terá que ser feito manualmente.

Possível solução para os problemas número 4 e 5: Você pode, ao invés de compilar o código e depois guardá-lo para eventualmente desinstalar o programa, gerar um pacote .deb utilizando o checkinstall. Para instalar este programa, basta digitar no terminal:

$ sudo apt-get install checkinstall

E, na hora de compilar, substitua sudo make install por sudo checkinstall:

$ ./configure
$ make
$ sudo checkinstall

E o que isso ai fará? ele compilará o código, gerará um arquivo .deb com o código compilado, e instalará o pacote. Depois disso, você poderá deletar o código-fonte, e poderá desinstalar o programa via Synaptics ou através do comando sudo dpkg -i pacote.

Mas o ideal mesmo...

...era que todas as distribuições padronizassem a forma de instalar os pacotes de programas. Eu acho que já falei sobre isso aqui em algum post.

Existem programas para Linux, bons e ótimos programas, que só são distribuídos sem pacotes pré-compilados, apenas através do código-fonte. E eu não posso culpar os desenvolvedores por isso. Eles teriam que gerar pacotes para uma infinidade de distribuições e os formatos que elas adotam (.rpm e .deb são os mais comuns), e às vezes até para versões de distribuições, como no caso do Fedora. Existe pacote para o FC1, FC2, FC3...

Mark Shuttkeworth, o pai do Ubuntu Linux em afirmar que as distros precisam se unir e se tornarem padronizadas. Ele sugeriu, e eu endosso, o uso do Autopackage, que torna a instalação de pacotes fácil em qualquer Desktop Linux[bb], e que resolveria boa parte destes problemas na distribuição de software.

Abraços a todos.

Tópicos: 
LinuxprogramaçãoUbuntu
2 comentários
Comente você também!

Meu primeiro sistema em PHP e MySQL (temperado com Javascript)

Terminei o meu primeiro sistema em PHP e MySQL[bb], que é o meu trabalho de conclusão do semestre. Provavelmente no momento em que vocês lerem isso, eu já estarei apresentando o sistema em aula.

Me matei fazendo esse sistema, hehehe, mas na minha opinião, ficou muito legal, para quem até alguns meses atrás não sabia quase nada de PHP e MySQL.

Compartilho com vocês o sistema, pois pode ser util para quem está aprendendo também. As tecnologias que eu utilizei foram:

  • Javascript (controle de campo de formulários, alert boxes, caixas de confirmação, etc);
  • PHP (faz a "logística" do sistema, e conexão com o banco);
  • MySQL (Banco de dados leve voltado para aplicações web);
  • XHTML Transional (responsável por toda a estrutura dos documentos);
  • CSS (responsável pela camada de apresentação dos documentos);

Não liguem para o design pobre, não tive tempo pra pensar nisso :P.

A sim, qualquer crítica ou dica para melhorar o sistema será muito bem vinda.

UPDATE: a pedido de algumas pessoas, eu coloquei o sistema online aqui. Para acessar a parte administrativa, clique aqui.

AnexoTamanho
Meu primeiro sistema em PHP e MySQL241.2 KB
Tópicos: 
programaçãoPHPMySQL
23 comentários
Comente você também!
Inscreva-se em RSS - programação

Siga no Twitter

Follow @marcusvbp

Assine por Email

Mais Comentados

  1. Sonho Lúcido e Paralisia do Sono (407)
  2. Relatório de Estágio completo, disponível para consulta e download (137)
  3. Usando um iPod Shuffle de 2gb sem utilizar o iTunes (30)
  4. Novo vírus do Orkut (alguma novidade?) (29)
  5. A volta do golpe do boleto falso, agora pela hostdobrasil.com (26)
  6. Hospedagem ILIMITADA por apenas 7 Reais mensais*? Só na Dreamhost! (26)
  7. Minha "lista de desejos" para o Linux (25)
  8. Webdesign no Linux Parte 4: Rodando um servidor Apache com PHP e MySQL (23)
  9. Webdesign no Linux, parte 3: programas de edição de código (23)
  10. Meu primeiro sistema em PHP e MySQL (temperado com Javascript) (23)

Populares do dia

  1. Novo Site: Natal Importados (2)
  2. Essa NICRegistro... (1)
  3. Usando um iPod Shuffle de 2gb sem utilizar o iTunes (1)
  4. Usando o módulo Twitter para twittar posts (1)
  5. Sonho Lúcido e Paralisia do Sono (1)
  6. Centralizando os elementos principais do layout (0)
  7. Posicionando as colunas do layout (0)
  8. Colocando o rodapé no local certo (0)
  9. Hardware e software utilizados (0)
  10. Descrição Geral das Atividades (0)
mais

Informativo

  • Relatório de Estágio: Desenvolvimento do Portal Paraíba Jovem
  • Gerenciamento de Conteúdo com o Drupal
  • Informativo

RSS Feed

  • RSS do Blog
  • RSS Mobile
  • RSS dos comentários

Arquivo mensal

  • Maio 2012 (2)
  • Abril 2012 (2)
  • Março 2012 (3)
  • Fevereiro 2012 (1)
  • Janeiro 2012 (4)
  • Dezembro 2011 (1)
  • Novembro 2011 (2)
  • Setembro 2011 (2)
  • Agosto 2011 (3)
  • Julho 2011 (2)
  • Junho 2011 (2)
Mais

Tópicos

  • ação (2)
  • Acessórios (1)
  • adsense (3)
  • Agenda (1)
  • Ajuda (1)
  • Android (2)
  • Animação (1)
  • Ano novo (1)
  • Apache (1)
  • Apple (2)
  • Arena (2)
Mais

Meu Twitter

Permitida a cópia desde que citado a fonte. [Política de Privacidade]

Powered by Drupal CMS.