Compilando Programas GNU/Linux

Hoje eu queria abordar sobre um assunto que deixa muitos usuários de Slackware e outras distribuições com dúvida. Como fazer uma compilação certa!

[ Hits: 3.879 ]

Por: slackjeff em 24/03/2017 | Blog: https://slackjeff.github.io


Requisitos e vantagens



Requisitos para praticar a compilação;
  • GCC e G++ instalados; ou
  • build-essential

Quais as vantagens de compilar?

Seu computador principalmente se for mais velho como o meu (AMD Athlon, 2.8ghz, 2GB ram) irá ter um desempenho muito superior aos programas que não são compilados.

Exemplo:

se comparar o mesmo programa na sua máquina, um genérico já compilado por outra pessoa que disponibilizou o pacote para qualquer computador e outro compilado por você... e para sua máquina, você perceberá um desempenho do programa de até 20%.

Pode ter certeza esses 20% fazem muita, mas muita diferença em computadores antigos.

Pelo contrário em um computador mais novo, tem diferença é claro, mas não é tão notável assim, principalmente em computadores com mais de 4GB de ram.

Antes do tutorial

Uma boa dica que eu dou é você seguir este tutorial e compilar todos programas do seu computador.

Mas como? Faça uma lista, pode ser no papel mesmo, de todos programas que você deseja compilar, exemplo: Firefox, Sublime, Gimp, Simple screen recorder, gparted e por aí a dentro.

Não precisa fazer tudo em um dia, até porque compilar dependendo do programa (tamanho) e do seu computador pode demorar.

Exemplo é o Kdenlive, eu demorei 16 horas para realizar tal proeza em meu computador, claro com todas dependências inclusas.

    Próxima página

Páginas do artigo
   1. Requisitos e vantagens
   2. Vamos a brincadeira
Outros artigos deste autor

Como ser um expert em GNU/Linux!

Slackware x Debian

Leitura recomendada

Aprendendo a linguagem Python - parte II

Arch Linux - Instalação completa

Desvendando o editor Vim

Gerenciamento de Lan House com Main Control System

Planejando a migração de aplicações comerciais para o Linux/GNU

  
Comentários
[1] Comentário enviado por Fellype em 24/03/2017 - 15:02h

A ideia geral do artigo é boa. Mas tem alguns equívocos que gostaria de comentar:
1- Ter GCC e G++ instalados podem não ser suficientes para compilar seu software. Vai depender da linguagem em que ele foi escrito. Por exemplo, um programa escrito em python vai requerer python instalado no PC (mesmo o plugin gcc-python necessita do python, se não me engano).

2- Tem um erro no primeiro comando da página 2:
ao invés de:
a- # ./configure & make & make install
o correto seria:
b- # ./configure && make && make install
com duplo "&"
ou
c- # ./configure ; make ; make install
No caso "b", o comando make só será executado se o ./configure não terminar com erro. Já no caso "c", o make será executado mesmo que o ./configure termine com erros. Logo, este último caso não é muito correto na verdade, pois o ./configure pode falhar, causando falha no make e, consequentemente, no make install.
No caso "a", com apenas um "&", haveria um erro do tipo:
> Make.conf: No such file or directory
e o ./configure continuaria rodando.

3- Ao executar o comando "make clean" antes do comando "make install" você não exclui apenas a ""sujeira" que a compilação deixou para trás", mas toda a compilação realizada pelo comando make. Por sorte, ao executar "make install", se não há objetos compilados, o make os compila e instala. Logo, com a sequência de comandos que você propôs (make -> make clean -> make install) o programa é compilado duas vezes, sendo uma delas desnecessária. O correto é usar o make clean após o make install.

4- Usar DESTDIR ao invés de DISTDIR no comando:
# make install DISTDIR=/tmp/joes-4.3

Acrescentando informação, um comando seguido de &, e sem mais nada na frente, faz com que ele seja rodado em segundo plano. Porém, não funciona com o ./configure, pois ele é na verdade uma coleção de comandos, e apenas o primeiro rodaria em segundo plano, com o resto rolando na tela.

Mais uma coisa, quando alguém for compilar um programa, o melhor a fazer é ler as instruções de compilação (geralmente um arquivo README ou INSTALL) e ficar atento às opções, como você fez ao ler o arquivo INSTALL.md.

Um abraço e até mais.

[2] Comentário enviado por lordestark em 24/03/2017 - 23:46h

Esse terminal eu conheço kkkkkk Emmi Linux (mas ainda não deixa de ser nescessário a aprendizagem, mesmo que em outras distros, pois compilação, tem em todas elas)
Saaaaaalve slaaack!!!

[3] Comentário enviado por sacioz em 26/03/2017 - 14:40h

Olá :
Como falou o Fellype acima , a idéia é boa mas incompleta(Debian Jessie Stable aqui ) creio eu , não consegui fazer o " make " aparecer . Vou tentar compilar usando o nano ou o vi ou ainda o EMACS , pois preciso(precisamos) de todo e qualquer ciclo disponivel para otimizar os nossos dinossauros ...))

[4] Comentário enviado por p4ulodi4s em 26/03/2017 - 15:31h

Oi, bom artigo.

No comando:

more INSTALL.md | less

Pode ser feito apenas:

less INSTALL.md

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/

[5] Comentário enviado por lcavalheiro em 30/03/2017 - 13:21h

Após corrigir alguns erros de comando (no configure o sysconfdir estava como etc, não como /etc, bem como o lance do DESTDIR que já havia sido apontado aqui) e concordar com o que foi dito sobre compiladores, eu devo dizer que o tutorial está quebrado no final. Quando você faz o make install com DESTDIR, o executável do compilado não vai ser posto em um diretório contido na variável $PATH, logo você não vai conseguir chamá-lo nem pelo terminal nem pelo chamador gráfico de aplicativos de seu ambiente de área de trabalho - isso se o programa compilado aparecer por lá. Resultado: se seguir o artigo, na hora que o candango rodar o "$ joe" ao final não vai acontecer nada.

Ademais, o "build-essential" é coisa exclusiva de Debian-likes. Outras distribuições ou não terão esse pacote (caso do Slackware, que já tem as ferramentas necessárias para compilação numa instalação full) ou esse pacote terá outro nome.
--
Dino®
[i]Vi veri universum vivus vici[/i]
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
[code][b]Mensagem do dia[/b]: Satã representa conhecimento sem limites e não auto-ilusão hipócrita.[/code]

[6] Comentário enviado por lcavalheiro em 30/03/2017 - 13:22h

Fora a gambiarra tosca do "$ more INSTALL.md | less"...
--
Dino®
[i]Vi veri universum vivus vici[/i]
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
[code][b]Mensagem do dia[/b]: Satã representa conhecimento sem limites e não auto-ilusão hipócrita.[/code]

[7] Comentário enviado por pontas em 31/03/2017 - 05:46h

Algumas perguntas:

1- SEMPRE é necessário instaar todas as dependencias anter de compilar o programa, correto?
2- por que é necessário criar uma pasta em /tmp? não é esta pasta que guarda cache da sessão e apaga ao desligar?
3- O comando make install DISTDIR=/tmp/joes-4.3 surge do arquivo INSTALL.md? nao achei lá. Em outras palavras: de onde surgiu o DISTDIR...?
4- Se eu quiser futuramente desistalar o programa uso o pacman/yaourt -R(ns) normalmente? (uso manjaro)

[8] Comentário enviado por lcavalheiro em 31/03/2017 - 11:31h


[7] Comentário enviado por pontas em 31/03/2017 - 05:46h

Algumas perguntas:

1- SEMPRE é necessário instaar todas as dependencias anter de compilar o programa, correto?
2- por que é necessário criar uma pasta em /tmp? não é esta pasta que guarda cache da sessão e apaga ao desligar?
3- O comando make install DISTDIR=/tmp/joes-4.3 surge do arquivo INSTALL.md? nao achei lá. Em outras palavras: de onde surgiu o DISTDIR...?
4- Se eu quiser futuramente desistalar o programa uso o pacman/yaourt -R(ns) normalmente? (uso manjaro)


Resposas:
1: Sim, é necessário ter todas as dependências instaladas antes de instalar o pacote alvo.
2: Criar em /tmp é convenção, você pode criar o diretório de trabalho em qualquer canto.
3: DESTDIR é uma variável de ambiente configurada no Makefile.in ou Makefile.am (não lembro agora). INSTALL.md é a documentação sobre a instalação escrita em sintaxe Markdown.
4: Obviamente não, e é por isso que em distro nenhuma se recomenda instalar pacotes dessa maneira. Se você compila e instala desse jeito cagado (desculpa, slackjeff, mas seu artigo está bem cagado), o gerenciador de pacotes não enxergará o negócio instalado e portanto não conseguirá remover o pacote compilado manualmente. Até no Slackware o recomendado é criar o pacote, e não sair fazendo desse jeito aí.

[9] Comentário enviado por Fellype em 31/03/2017 - 14:35h



4: Obviamente não, e é por isso que em distro nenhuma se recomenda instalar pacotes dessa maneira. Se você compila e instala desse jeito cagado (desculpa, slackjeff, mas seu artigo está bem cagado), o gerenciador de pacotes não enxergará o negócio instalado e portanto não conseguirá remover o pacote compilado manualmente. Até no Slackware o recomendado é criar o pacote, e não sair fazendo desse jeito aí.

Para desinstalar um software instalado desta maneira, basta usar 'make uninstall DESTDIR=/caminho/da/instalação/' Mas do jeito que o artigo propõe a instalação, basta deletar a pasta /tmp/joes-4.3 para o programa sumir.
A propósito, um erro neste artigo que ainda não comentamos é que para executar o programa que foi compilado (o Joe's), ele teria que entrar na pasta /tmp/joes-4.3/usr/bin/ e digitar ./joe, ou então criar um atalho em /usr/bin/ para o arquivo /tmp/joes-4.3/usr/bin/joe, ou ainda adicionar o caminho /tmp/joes-4.3/usr/bin/ à variável PATH (com estas duas últimas a gambiarra seria completa...)
A propósito 2: se ele executasse o comando (usando Slackware) na pasta /tmp/joes-4.3/:
# /sbin/makepkg -l y -c n /tmp/joes-4.3.txz
seria criado o pacote joes-4.3.txz na pasta /tmp, que poderia ser instalado (no Slackware) com:
# installpkg /tmp/joes-4.3.txz
que poderia ser desinstalado facilmente com:
# removepkg joes

Aproveitando... setar a variável DESTDIR não é a única maneira possível de dizer ao 'make install' qual o caminho de instalação. Novamente, vai depender do programa a ser compilado.
~7 anos atrás eu publiquei uma dica sobre o assunto:
https://www.vivaolinux.com.br/dica/DESTDIR-PREFIX-ou-INSTALL_ROOT
Naquela época, eu nunca tinha compilado nenhum programa em python. Neste caso, teríamos, por exemplo, algo do tipo:
python setup.py install --root=/caminho/da/instalação/

[10] Comentário enviado por morvan em 14/04/2017 - 23:59h

Boa noite.

Duas observações, as quais, penso, ajudarão a você, articulista, a descrever com mais perfeição técnica, em futuros textos:
"... A próxima etapa é o MAKE ele é o "cara" é ele que compila o programa, transformando a codificação na linguagem da máquina."
De fato, não. O make é o programa que organiza, tendo como critério as datas das compilações, a invocação do aplicativo que realmente faz a compilação, o gcc (este invoca outros, mas, grosso modo, é com ele...).
Se não houver nenhum arquivo modificado, ou seja, com data de salvamento posterior à compilação, na verdade, o make passará direto à instalação, por causa do parâmetro --install;
falta, à guisa de informação, ilustrar ao leitor parâmetros de compilação, como -O, nível de warnings, etc. Mas aí o artigo perderia um pouco o seu critério de introdutório.
A grande virtude deste artigo, introdutório, supõe-se, é de educar o usuário a fazer a compilação com as permissões adequadas. Quanto a isso, parabéns.

Morvan, Usuário GNU-Linux #433640. Seja Legal; seja Livre. Use GNU-Linux.

[11] Comentário enviado por Carlos_Cunha em 21/04/2017 - 19:41h

Parabéns pelo Artigo, ira auxiliar bastante gente.
Mas digo assim, hoje em dia com a advento da Virtualização, e quase zero o ganho em se compilar algo, somente em casos específicos, um por exemplo é criar uma kernel personalizado para uma questão X ou Y.
Para usuário domestico e mais mesmo a nível de experimentar ou para algo bem especifico

Abraço
#-------------------------------------------------------------------------------------#
Administrador de Redes Mistas Linux/Windows
LPI 101-102
LPI 201
Para consultas particulares acesse:
www.cunhatec.com.br

"Falar é fácil, me mostre o código." - Linus Torvalds


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts