{"id":2379,"date":"2026-08-21T18:01:04","date_gmt":"2026-08-21T21:01:04","guid":{"rendered":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/"},"modified":"2026-08-21T18:01:04","modified_gmt":"2026-08-21T21:01:04","slug":"aula-25-compilacao-de-software-make-gcc-e-build-essential","status":"publish","type":"post","link":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/","title":{"rendered":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential"},"content":{"rendered":"<p>A <strong>compila\u00e7\u00e3o de software<\/strong> \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como <strong>apt<\/strong>, <strong>dnf<\/strong> ou <strong>yum<\/strong> \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de CPU espec\u00edfica, aplicar patches de seguran\u00e7a antes de o pacote oficial ser lan\u00e7ado ou instalar vers\u00f5es que n\u00e3o est\u00e3o dispon\u00edveis nos reposit\u00f3rios da sua distribui\u00e7\u00e3o. Nesta aula, voc\u00ea vai dominar o ciclo completo de compila\u00e7\u00e3o no Linux, do <strong>GCC<\/strong> ao <strong>Make<\/strong>, incluindo a instala\u00e7\u00e3o do conjunto de ferramentas <strong>build-essential<\/strong> e a compila\u00e7\u00e3o de um software real a partir do zero.<\/p>\n<p>Esta \u00e9 a Aula 25 do curso <strong>Linux \u2014 Do Zero ao Avan\u00e7ado<\/strong>, e o n\u00edvel \u00e9 avan\u00e7ado. Nas aulas anteriores, voc\u00ea aprendeu a gerenciar pacotes, manipular processos, trabalhar com permiss\u00f5es e editar arquivos de configura\u00e7\u00e3o. Agora, vamos unir esses conhecimentos para entender o que acontece nos bastidores quando um programa \u00e9 transformado de c\u00f3digo-fonte em um arquivo execut\u00e1vel. Voc\u00ea ver\u00e1 exatamente quais ferramentas s\u00e3o necess\u00e1rias, como instal\u00e1-las em diferentes fam\u00edlias de distribui\u00e7\u00f5es e como us\u00e1-las de forma profissional.<\/p>\n<p>O dom\u00ednio da <strong>compila\u00e7\u00e3o de software<\/strong> \u00e9 um diferencial cr\u00edtico para profissionais de infraestrutura e seguran\u00e7a da informa\u00e7\u00e3o. Em nossos projetos na <strong>JRT Technology Solutions<\/strong>, nossos especialistas utilizam diariamente esses procedimentos para personalizar aplica\u00e7\u00f5es, corrigir vulnerabilidades e otimizar o desempenho de servidores de produ\u00e7\u00e3o. Seja para compilar um kernel, instalar um servidor web com m\u00f3dulos n\u00e3o padr\u00e3o ou simplesmente testar um programa em C, o conhecimento que voc\u00ea adquirir\u00e1 aqui \u00e9 indispens\u00e1vel para avan\u00e7ar na carreira t\u00e9cnica.<\/p>\n<p>Nesta aula, voc\u00ea vai aprender o papel do <strong>GCC<\/strong> (GNU Compiler Collection), do <strong>Make<\/strong> e do pacote <strong>build-essential<\/strong> no ecossistema GNU\/Linux. Vamos instalar o ambiente de compila\u00e7\u00e3o em distribui\u00e7\u00f5es baseadas em <strong>Debian\/Ubuntu<\/strong> e em <strong>CentOS\/RHEL\/Rocky Linux<\/strong>. Em seguida, voc\u00ea criar\u00e1 um programa em linguagem C, compilar\u00e1 manualmente com o GCC, automatizar\u00e1 o processo com um <strong>Makefile<\/strong> e, por fim, compilar\u00e1 um software real a partir de um tarball de c\u00f3digo-fonte. Tudo ser\u00e1 mostrado passo a passo, com comandos reais, sa\u00eddas esperadas e explica\u00e7\u00f5es linha por linha.<\/p>\n<p>Ao final desta aula, voc\u00ea ter\u00e1 autonomia para compilar qualquer software open source no Linux, diagnosticar erros de compila\u00e7\u00e3o, entender as mensagens do compilador e aplicar boas pr\u00e1ticas de automa\u00e7\u00e3o com <code>make<\/code>. Como b\u00f4nus, veremos como desinstalar corretamente softwares compilados manualmente e como evitar conflitos com pacotes gerenciados pelo sistema.<\/p>\n<h3>O que voc\u00ea vai aprender nesta aula<\/h3>\n<p>Antes de colocar a m\u00e3o na massa, vamos definir os objetivos de aprendizagem desta aula. Eles foram desenhados para que voc\u00ea desenvolva compet\u00eancia pr\u00e1tica real, n\u00e3o apenas conhecimento te\u00f3rico. Ao concluir todos os passos propostos, voc\u00ea ter\u00e1 executado de forma independente todos os procedimentos descritos.<\/p>\n<ul>\n<li>Compreender o processo de <strong>compila\u00e7\u00e3o de software<\/strong>: do c\u00f3digo-fonte ao execut\u00e1vel bin\u00e1rio, passando por pr\u00e9-processamento, compila\u00e7\u00e3o, assembly e liga\u00e7\u00e3o.<\/li>\n<li>Instalar o ambiente de desenvolvimento completo em sistemas <strong>Ubuntu\/Debian<\/strong> com o pacote <strong>build-essential<\/strong> e em <strong>CentOS\/RHEL\/Rocky Linux<\/strong> com o grupo <strong>Development Tools<\/strong>.<\/li>\n<li>Utilizar o <strong>GCC<\/strong> para compilar programas em C e entender as principais flags de compila\u00e7\u00e3o, como <code>-Wall<\/code>, <code>-O2<\/code> e <code>-g<\/code>.<\/li>\n<li>Criar e configurar um <strong>Makefile<\/strong> completo, com vari\u00e1veis, regras, depend\u00eancias e alvos de limpeza.<\/li>\n<li>Compilar um software real a partir do c\u00f3digo-fonte, utilizando a sequ\u00eancia cl\u00e1ssica <code>.\/configure<\/code>, <code>make<\/code> e <code>make install<\/code>.<\/li>\n<li>Verificar se o ambiente de compila\u00e7\u00e3o est\u00e1 funcionando corretamente, testar o execut\u00e1vel gerado e validar as vers\u00f5es das ferramentas.<\/li>\n<li>Diagnosticar e corrigir erros comuns durante a compila\u00e7\u00e3o, como bibliotecas ausentes, permiss\u00f5es incorretas e depend\u00eancias de desenvolvimento.<\/li>\n<li>Aplicar boas pr\u00e1ticas de otimiza\u00e7\u00e3o, desinstala\u00e7\u00e3o segura e automa\u00e7\u00e3o em projetos de compila\u00e7\u00e3o de software.<\/li>\n<\/ul>\n<h3>Pr\u00e9-requisitos e Ambiente<\/h3>\n<p>Para aproveitar ao m\u00e1ximo esta aula, voc\u00ea precisa ter conclu\u00eddo as aulas anteriores do curso ou possuir conhecimentos equivalentes. Especificamente, \u00e9 essencial que voc\u00ea saiba navegar pela estrutura de diret\u00f3rios do Linux, editar arquivos de texto com editores como <code>nano<\/code> ou <code>vim<\/code>, gerenciar permiss\u00f5es com <code>chmod<\/code> e instalar pacotes usando o gerenciador da sua distribui\u00e7\u00e3o. Esses conceitos foram abordados em profundidade nas Aulas 8 a 15 deste curso.<\/p>\n<p>O ambiente de teste recomendado \u00e9 uma m\u00e1quina virtual ou um servidor limpo com uma das seguintes distribui\u00e7\u00f5es: <strong>Ubuntu Server 22.04 ou 24.04 LTS<\/strong>, <strong>Debian 12<\/strong>, <strong>CentOS Stream 9<\/strong>, <strong>RHEL 9<\/strong> ou <strong>Rocky Linux 9<\/strong>. A compila\u00e7\u00e3o de software \u00e9 um processo que exige recursos de CPU e mem\u00f3ria; portanto, evite usar uma inst\u00e2ncia muito pequena. Recomendamos pelo menos 2 vCPUs e 2 GB de RAM para os exemplos desta aula.<\/p>\n<p>Por se tratar de uma aula com muitos comandos de instala\u00e7\u00e3o e compila\u00e7\u00e3o, \u00e9 altamente recomendado executar os procedimentos em um ambiente que voc\u00ea possa reiniciar ou restaurar sem risco. Em nossos treinamentos na <strong>JRT Technology Solutions<\/strong>, sempre utilizamos snapshots ou m\u00e1quinas descart\u00e1veis para pr\u00e1tica de compila\u00e7\u00e3o, pois \u00e9 comum que erros aconte\u00e7am durante o aprendizado. Voc\u00ea deve ter acesso como usu\u00e1rio com privil\u00e9gios de <code>sudo<\/code> para instalar pacotes e gravar em diret\u00f3rios do sistema.<\/p>\n<p>Outro pr\u00e9-requisito importante \u00e9 o acesso \u00e0 internet para baixar o c\u00f3digo-fonte de exemplo. Se voc\u00ea estiver em um ambiente restrito, pode substituir o download pelo c\u00f3digo-fonte de um projeto local, mas recomendamos fortemente que voc\u00ea siga o exemplo real para vivenciar o processo completo, incluindo a resolu\u00e7\u00e3o de depend\u00eancias. Al\u00e9m disso, certifique-se de que o rel\u00f3gio do sistema est\u00e1 correto, pois alguns processos de compila\u00e7\u00e3o e verifica\u00e7\u00e3o de assinaturas podem falhar em caso de diverg\u00eancia de hor\u00e1rio.<\/p>\n<p>Por fim, prepare o terminal. Todos os comandos desta aula devem ser executados em um shell <strong>bash<\/strong> ou compat\u00edvel. Recomendamos o uso de um terminal com pelo menos 80 colunas por 24 linhas para facilitar a leitura das sa\u00eddas. Se voc\u00ea estiver usando SSH, verifique se a conex\u00e3o est\u00e1 est\u00e1vel, pois alguns passos de compila\u00e7\u00e3o podem demorar v\u00e1rios minutos.<\/p>\n<h3>Compila\u00e7\u00e3o de software: como o c\u00f3digo-fonte vira execut\u00e1vel<\/h3>\n<p>Antes de executar qualquer comando, \u00e9 fundamental entender o que acontece nos bastidores da <strong>compila\u00e7\u00e3o de software<\/strong>. Um programa escrito em linguagens como C, C++ ou Rust n\u00e3o pode ser executado diretamente pela CPU; ele precisa ser traduzido para linguagem de m\u00e1quina. Esse processo de tradu\u00e7\u00e3o \u00e9 dividido em quatro fases principais: <strong>pr\u00e9-processamento<\/strong>, <strong>compila\u00e7\u00e3o<\/strong>, <strong>assembly<\/strong> e <strong>linkagem<\/strong>. Cada fase \u00e9 executada por ferramentas especializadas que, juntas, formam o toolchain de compila\u00e7\u00e3o.<\/p>\n<p>No pr\u00e9-processamento, o compilador processa diretivas que come\u00e7am com <code>#<\/code>, como <code>#include<\/code> e <code>#define<\/code>. Os arquivos de cabe\u00e7alho (<code>.h<\/code>) s\u00e3o inseridos no c\u00f3digo-fonte, macros s\u00e3o expandidas e coment\u00e1rios s\u00e3o removidos. O resultado \u00e9 um arquivo de c\u00f3digo-fonte puro, pronto para ser compilado. Na fase de compila\u00e7\u00e3o propriamente dita, o c\u00f3digo \u00e9 traduzido para assembly, uma linguagem simb\u00f3lica de baixo n\u00edvel que representa as instru\u00e7\u00f5es da CPU.<\/p>\n<p>A fase de assembly converte o c\u00f3digo assembly em c\u00f3digo de m\u00e1quina, gerando arquivos-objeto com extens\u00e3o <code>.o<\/code>. Esses arquivos cont\u00eam instru\u00e7\u00f5es bin\u00e1rias, mas ainda n\u00e3o podem ser executados, pois podem referenciar fun\u00e7\u00f5es e vari\u00e1veis de outros m\u00f3dulos ou bibliotecas compartilhadas. \u00c9 na fase de linkagem que o linker combina todos os arquivos-objeto, resolve refer\u00eancias externas e produz o execut\u00e1vel final ou a biblioteca din\u00e2mica. O <strong>GCC<\/strong> integra todas essas fases em um \u00fanico comando, mas permite controlar cada etapa individualmente.<\/p>\n<p>O comando <strong>make<\/strong>, por sua vez, n\u00e3o \u00e9 um compilador; \u00e9 uma ferramenta de automa\u00e7\u00e3o de build. Ele l\u00ea um arquivo chamado <strong>Makefile<\/strong>, que cont\u00e9m regras, depend\u00eancias e comandos para compilar um projeto de forma incremental. O make analisa os timestamps dos arquivos-fonte e objetos, compilando apenas o que foi modificado, o que acelera drasticamente o processo em projetos grandes, como o kernel Linux ou o servidor Apache. \u00c9 esse trabalho em conjunto entre GCC e Make que permite a compila\u00e7\u00e3o de projetos complexos com milhares de arquivos.<\/p>\n<p>O pacote <strong>build-essential<\/strong> \u00e9 um meta-pacote presente nas distribui\u00e7\u00f5es Debian e Ubuntu que instala o conjunto m\u00ednimo de ferramentas necess\u00e1rias para compilar a maioria dos softwares em C e C++. Ele inclui o <code>gcc<\/code>, o <code>g++<\/code>, o <code>make<\/code>, o <code>libc6-dev<\/code> (headers da biblioteca C) e outras ferramentas essenciais. Em distribui\u00e7\u00f5es da fam\u00edlia Red Hat, o equivalente \u00e9 o grupo de pacotes <strong>Development Tools<\/strong>, que tamb\u00e9m instala o GCC, o Make, o autotools e outras ferramentas de desenvolvimento. Entender essa correspond\u00eancia \u00e9 essencial para trabalhar com diferentes distribui\u00e7\u00f5es.<\/p>\n<p>Em nossos projetos na <strong>JRT Technology Solutions<\/strong>, encontramos frequentemente servidores que precisam de uma vers\u00e3o espec\u00edfica de um software que n\u00e3o est\u00e1 dispon\u00edvel nos reposit\u00f3rios oficiais. Nesses casos, a compila\u00e7\u00e3o de software \u00e9 a \u00fanica sa\u00edda. Ter clareza sobre as quatro fases do processo permite que nossos especialistas interpretem corretamente as mensagens de erro e tomem decis\u00f5es r\u00e1pidas sobre qual depend\u00eancia est\u00e1 faltando ou qual flag de otimiza\u00e7\u00e3o deve ser ajustada.<\/p>\n<h3>O toolchain: GCC, Make e build-essential<\/h3>\n<p>Agora que voc\u00ea compreende a teoria, vamos detalhar cada componente do toolchain de compila\u00e7\u00e3o. O <strong>GCC<\/strong> (GNU Compiler Collection) \u00e9 um compilador multi-linguagem que suporta C, C++, Objective-C, Fortran, Ada e Go. Apesar do nome, ele \u00e9 parte essencial do sistema b\u00e1sico da maioria das distribui\u00e7\u00f5es Linux, embora nem sempre venha instalado por padr\u00e3o em imagens m\u00ednimas. O GCC \u00e9 extremamente configur\u00e1vel e oferece centenas de flags de compila\u00e7\u00e3o para controle de otimiza\u00e7\u00e3o, debugging, warnings e gera\u00e7\u00e3o de c\u00f3digo.<\/p>\n<p>O <strong>Make<\/strong> \u00e9 uma ferramenta de automa\u00e7\u00e3o de build originalmente criada por Stuart Feldman em 1976. Ela permite definir regras no <strong>Makefile<\/strong> que especificam como derivar um arquivo a partir de outro. O make resolve automaticamente depend\u00eancias entre alvos e executa os comandos necess\u00e1rios para atualizar o alvo final. Por exemplo, se voc\u00ea definir que o programa <code>meuapp<\/code> depende de <code>main.o<\/code> e <code>utils.o<\/code>, e que cada <code>.o<\/code> depende do respectivo <code>.c<\/code>, o make compilar\u00e1 apenas os fontes que foram alterados desde a \u00faltima execu\u00e7\u00e3o. Isso pode reduzir o tempo de build de um projeto de minutos para segundos.<\/p>\n<p>O pacote <strong>build-essential<\/strong> \u00e9 a forma mais r\u00e1pida de instalar todas as ferramentas essenciais de compila\u00e7\u00e3o em distribui\u00e7\u00f5es baseadas no Debian. Ele possui depend\u00eancias que garantem a presen\u00e7a do <code>gcc<\/code>, <code>g++<\/code>, <code>make<\/code>, <code>dpkg-dev<\/code>, <code>libc6-dev<\/code> e <code>linux-libc-dev<\/code>. Sem essas ferramentas, voc\u00ea n\u00e3o conseguir\u00e1 compilar nem os programas mais simples em C. J\u00e1 em distribui\u00e7\u00f5es baseadas em RPM, como RHEL, CentOS e Rocky Linux, o pacote equivalente \u00e9 o grupo <strong>Development Tools<\/strong>, instalado via <code>dnf groupinstall<\/code>.<\/p>\n<p>Al\u00e9m do GCC e do Make, a maioria dos projetos open source utiliza o sistema <strong>Autotools<\/strong>, composto por <code>autoconf<\/code>, <code>automake<\/code> e <code>libtool<\/code>. Essas ferramentas geram scripts <code>configure<\/code> que verificam o ambiente do sistema, detectam bibliotecas instaladas e adaptam o Makefile para a arquitetura local. Quando voc\u00ea executa <code>.\/configure<\/code> antes de <code>make<\/code>, est\u00e1 usando o Autotools para preparar o build especificamente para o seu sistema. Instalaremos tamb\u00e9m essas ferramentas em ambas as fam\u00edlias de distribui\u00e7\u00f5es.<\/p>\n<p>Outro componente frequentemente necess\u00e1rio \u00e9 o <strong>pkg-config<\/strong>, uma ferramenta que ajuda o compilador a encontrar bibliotecas de desenvolvimento instaladas em locais n\u00e3o padr\u00e3o. Ele consulta arquivos <code>.pc<\/code> que cont\u00eam flags de compila\u00e7\u00e3o e linker para cada biblioteca. O <code>pkg-config<\/code> \u00e9 indispens\u00e1vel para compilar softwares que usam GTK, OpenSSL, SQLite e outras bibliotecas populares. Veremos exemplos de como ele \u00e9 usado durante o procedimento de compila\u00e7\u00e3o real.<\/p>\n<p>Para complementar, o <strong>gdb<\/strong> (GNU Debugger) e o <strong>strace<\/strong> s\u00e3o ferramentas de debug e rastreamento que ajudam a identificar problemas em tempo de execu\u00e7\u00e3o. Embora n\u00e3o sejam obrigat\u00f3rios para compilar, s\u00e3o extremamente \u00fateis para diagnosticar falhas em softwares compilados manualmente. Em nosso time de infraestrutura na <strong>JRT Technology Solutions<\/strong>, o uso combinado de GCC, Make, pkg-config e gdb resolve a maioria dos problemas de compila\u00e7\u00e3o e execu\u00e7\u00e3o que encontramos no dia a dia.<\/p>\n<h3>Instalando o ambiente de compila\u00e7\u00e3o no Ubuntu e Debian<\/h3>\n<p>Vamos come\u00e7ar a pr\u00e1tica instalando todo o ambiente de compila\u00e7\u00e3o em sistemas <strong>Ubuntu 22.04\/24.04 LTS<\/strong> e <strong>Debian 12<\/strong>. O procedimento \u00e9 simples, mas deve ser executado com aten\u00e7\u00e3o. Primeiro, atualize os \u00edndices de pacotes do APT para garantir que voc\u00ea est\u00e1 instalando as vers\u00f5es mais recentes dispon\u00edveis nos reposit\u00f3rios oficiais. Em seguida, instale o pacote <strong>build-essential<\/strong>, que trar\u00e1 automaticamente todas as depend\u00eancias necess\u00e1rias.<\/p>\n<p>Al\u00e9m do build-essential, vamos instalar algumas ferramentas complementares que ser\u00e3o \u00fateis nos exemplos posteriores desta aula: <code>autoconf<\/code>, <code>automake<\/code>, <code>libtool<\/code>, <code>pkg-config<\/code> e <code>gdb<\/code>. O pacote <code>git<\/code> tamb\u00e9m ser\u00e1 instalado, pois muitos projetos disponibilizam o c\u00f3digo-fonte atrav\u00e9s de reposit\u00f3rios Git. Por fim, instalaremos o <code>checkinstall<\/code>, que permite criar pacotes <code>.deb<\/code> a partir de compila\u00e7\u00f5es manuais, facilitando a desinstala\u00e7\u00e3o segura. Cada comando \u00e9 explicado em detalhe nas linhas comentadas abaixo.<\/p>\n<pre><code># Atualiza a lista de pacotes dispon\u00edveis nos reposit\u00f3rios configurados\nsudo apt update\n\n# Instala o meta-pacote build-essential (gcc, g++, make, libc6-dev, etc.)\nsudo apt install -y build-essential\n\n# Instala ferramentas do Autotools para projetos que usam .\/configure\nsudo apt install -y autoconf automake libtool\n\n# Instala pkg-config para localiza\u00e7\u00e3o de bibliotecas de desenvolvimento\nsudo apt install -y pkg-config\n\n# Instala o debugger GDB para an\u00e1lise de falhas em tempo de execu\u00e7\u00e3o\nsudo apt install -y gdb\n\n# Instala o checkinstall para criar pacotes .deb a partir de compila\u00e7\u00f5es manuais\nsudo apt install -y checkinstall\n\n# Instala o Git para clonar reposit\u00f3rios de c\u00f3digo-fonte\nsudo apt install -y git<\/code><\/pre>\n<p>Ap\u00f3s a execu\u00e7\u00e3o dos comandos acima, todos os pacotes ser\u00e3o baixados e instalados automaticamente. O APT resolver\u00e1 as depend\u00eancias e mostrar\u00e1 um resumo das opera\u00e7\u00f5es. Em sistemas Ubuntu, o pacote <code>build-essential<\/code> normalmente ocupa cerca de 50 MB de espa\u00e7o em disco ap\u00f3s a instala\u00e7\u00e3o. Em Debian, o tamanho pode variar ligeiramente, mas o conjunto de ferramentas \u00e9 essencialmente o mesmo. N\u00e3o \u00e9 necess\u00e1rio reiniciar o sistema; o ambiente estar\u00e1 pronto imediatamente.<\/p>\n<p>\u00c9 importante destacar que o pacote <strong>build-essential<\/strong> \u00e9 um meta-pacote, ou seja, ele n\u00e3o cont\u00e9m arquivos pr\u00f3prios, mas depende de outros pacotes. Por isso, ao remov\u00ea-lo com <code>apt remove build-essential<\/code>, as depend\u00eancias n\u00e3o s\u00e3o removidas automaticamente; voc\u00ea precisaria usar <code>apt autoremove<\/code> para limpar pacotes \u00f3rf\u00e3os. No entanto, recomendamos manter essas ferramentas instaladas em servidores de desenvolvimento, pois a remo\u00e7\u00e3o pode quebrar softwares que dependem delas.<\/p>\n<p>Abaixo, apresentamos um exemplo de sa\u00edda esperada do comando <code>sudo apt install -y build-essential<\/code> em um Ubuntu 24.04 rec\u00e9m-instalado. A sa\u00edda varia conforme a vers\u00e3o e os pacotes j\u00e1 instalados, mas deve conter as informa\u00e7\u00f5es principais de instala\u00e7\u00e3o:<\/p>\n<pre><code class=\"output\">Reading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following additional packages will be installed:\n  g++ g++-13 gcc gcc-13 libc6-dev libstdc++-13-dev make\nSuggested packages:\n  gcc-multilib autoconf automake libtool flex bison gdb gcc-doc\nRecommended packages:\n  libc6-dev libstdc++-13-dev\nThe following NEW packages will be installed:\n  build-essential g++ g++-13 gcc gcc-13 libc6-dev libstdc++-13-dev make\n0 upgraded, 8 newly installed, 0 to remove and 3 not upgraded.\nNeed to get 29.8 MB of archives.\nAfter this operation, 98.6 MB of additional disk space will be used.\nDo you want to continue? [Y\/n] Y\n...\nSetting up build-essential (12.10ubuntu1) ...\nProcessing triggers for man-db (2.12.0-4build2) ...<\/code><\/pre>\n<p>Observe que a sa\u00edda lista os pacotes adicionais que ser\u00e3o instalados como depend\u00eancias do build-essential. O APT solicita confirma\u00e7\u00e3o, que foi respondida com <code>Y<\/code> automaticamente pela flag <code>-y<\/code>. No final, o sistema executa os gatilhos de atualiza\u00e7\u00e3o do banco de dados de manuais. Agora seu ambiente est\u00e1 pronto para compilar programas em C e C++.<\/p>\n<h3>Instalando o ambiente de compila\u00e7\u00e3o no CentOS, RHEL e Rocky Linux<\/h3>\n<p>Nas distribui\u00e7\u00f5es da fam\u00edlia Red Hat, como <strong>CentOS Stream 9<\/strong>, <strong>RHEL 9<\/strong> e <strong>Rocky Linux 9<\/strong>, o processo de instala\u00e7\u00e3o do ambiente de compila\u00e7\u00e3o \u00e9 um pouco diferente, mas igualmente direto. Utilizamos o gerenciador de pacotes <code>dnf<\/code> (ou <code>yum<\/code> em vers\u00f5es mais antigas, como CentOS 7) para instalar o grupo <strong>Development Tools<\/strong>, que inclui o GCC, o Make, o Autotools e outras ferramentas essenciais.<\/p>\n<p>Primeiro, atualize os reposit\u00f3rios do sistema. Em seguida, liste os grupos dispon\u00edveis para confirmar o nome exato do grupo de desenvolvimento. Nos sistemas mais recentes, o grupo chama-se <strong>Development Tools<\/strong>; em vers\u00f5es antigas, podia aparecer como <code>Development tools<\/code>. Ap\u00f3s a confirma\u00e7\u00e3o, execute o comando <code>dnf groupinstall \"Development Tools\"<\/code>. Esse comando instalar\u00e1 mais de 100 pacotes, incluindo <code>gcc<\/code>, <code>gcc-c++<\/code>, <code>make<\/code> e <code>autoconf<\/code>.<\/p>\n<p>Vamos tamb\u00e9m instalar o <code>pkg-config<\/code>, o <code>gdb<\/code> e o <code>git<\/code>, que n\u00e3o est\u00e3o necessariamente no grupo padr\u00e3o. O <code>pkg-config<\/code> \u00e9 frequentemente necess\u00e1rio para encontrar bibliotecas de desenvolvimento em projetos que usam o Autotools. O <code>gdb<\/code> permite depurar programas em caso de falhas. O <code>git<\/code> \u00e9 \u00fatil para clonar reposit\u00f3rios de c\u00f3digo-fonte. Por fim, instalaremos o <code>rpm-build<\/code>, que \u00e9 o equivalente ao checkinstall e permite criar pacotes RPM a partir de compila\u00e7\u00f5es manuais.<\/p>\n<pre><code># Atualiza os reposit\u00f3rios e pacotes do sistema\nsudo dnf update -y\n\n# Lista os grupos dispon\u00edveis filtrando por \"Development\"\nsudo dnf group list | grep -i development\n\n# Instala o grupo completo de ferramentas de desenvolvimento\nsudo dnf groupinstall -y \"Development Tools\"\n\n# Instala ferramentas complementares individualmente\nsudo dnf install -y pkg-config gdb git rpm-build<\/code><\/pre>\n<p>A instala\u00e7\u00e3o do grupo <strong>Development Tools<\/strong> \u00e9 mais demorada que a do build-essential no Ubuntu, pois inclui uma quantidade maior de pacotes, como o <code>flex<\/code>, <code>bison<\/code>, <code>cmake<\/code> e v\u00e1rias bibliotecas de desenvolvimento. Em um servidor com boa conex\u00e3o, o processo pode levar de 2 a 5 minutos. Ap\u00f3s a conclus\u00e3o, o sistema estar\u00e1 pronto para compilar software, e voc\u00ea n\u00e3o precisar\u00e1 reiniciar a m\u00e1quina.<\/p>\n<p>Uma diferen\u00e7a importante em rela\u00e7\u00e3o ao Debian \u00e9 que, no RHEL e derivados, o compilador GCC e as bibliotecas de desenvolvimento s\u00e3o frequentemente divididos em pacotes separados. Por exemplo, o pacote <code>gcc<\/code> cont\u00e9m apenas o compilador para a linguagem C, enquanto <code>gcc-c++<\/code> \u00e9 necess\u00e1rio para compilar C++. Ao instalar o grupo Development Tools, ambos s\u00e3o instalados automaticamente. Isso \u00e9 relevante quando voc\u00ea precisa compilar um software que usa apenas C e deseja economizar espa\u00e7o em disco, embora o grupo completo seja recomendado para a maioria dos casos.<\/p>\n<p>Em nossos projetos na <strong>JRT Technology Solutions<\/strong>, padronizamos a instala\u00e7\u00e3o do grupo Development Tools em todos os servidores de build e homologa\u00e7\u00e3o que usam distribui\u00e7\u00f5es Red Hat. Essa padroniza\u00e7\u00e3o evita surpresas durante a compila\u00e7\u00e3o de software de terceiros e garante que todos os desenvolvedores tenham as mesmas ferramentas dispon\u00edveis. Documente sempre o procedimento de instala\u00e7\u00e3o no seu reposit\u00f3rio de infraestrutura como c\u00f3digo para facilitar a reprodu\u00e7\u00e3o.<\/p>\n<p>Abaixo, um exemplo de sa\u00edda esperada ao executar <code>sudo dnf groupinstall -y \"Development Tools\"<\/code> no Rocky Linux 9. A listagem de pacotes foi truncada para economia de espa\u00e7o, mas a sa\u00edda real cont\u00e9m todos os pacotes do grupo:<\/p>\n<pre><code class=\"output\">Last metadata expiration check: 0:03:22 ago on Fri 21 Aug 2026 09:42:13 AM -03.\nDependencies resolved.\n================================================================================\n Package                        Arch     Version          Repository     Size\n================================================================================\nInstalling group\/module packages:\n autoconf                       noarch   2.69-38.el9      baseos        710 k\n automake                       noarch   1.16.2-13.el9    baseos        741 k\n bison                          x86_64   3.7.4-5.el9      appstream     1.0 M\n cmake                          x86_64   3.20.2-8.el9     appstream     7.2 M\n gcc                            x86_64   11.4.1-3.el9     appstream     28 M\n gcc-c++                        x86_64   11.4.1-3.el9     appstream     12 M\n make                           x86_64   1:4.3-7.el9      baseos        556 k\n ...\nTransaction Summary\n================================================================================\nInstall  136 Packages\n\nTotal download size: 215 M\nInstalled size: 650 M\nDownloading Packages:\n...\nComplete!<\/code><\/pre>\n<p>Note que o DNF exibe um resumo completo da transa\u00e7\u00e3o, incluindo o n\u00famero de pacotes, o tamanho do download e o espa\u00e7o em disco necess\u00e1rio. A palavra <code>Complete!<\/code> no final indica que a instala\u00e7\u00e3o foi bem-sucedida. Agora, independentemente da distribui\u00e7\u00e3o utilizada, voc\u00ea tem todas as ferramentas necess\u00e1rias para iniciar a compila\u00e7\u00e3o de software.<\/p>\n<h3>Compilando seu primeiro programa com GCC<\/h3>\n<p>Com o ambiente instalado, vamos criar um programa simples em C e compil\u00e1-lo manualmente com o <strong>GCC<\/strong>. Esse exerc\u00edcio permite visualizar cada etapa do processo de compila\u00e7\u00e3o e entender as flags b\u00e1sicas. Crie um diret\u00f3rio de trabalho chamado <code>projeto1<\/code> em seu home e, dentro dele, um arquivo chamado <code>hello.c<\/code> com o conte\u00fado mostrado abaixo. Use o editor de sua prefer\u00eancia: <code>nano<\/code>, <code>vim<\/code> ou <code>gedit<\/code>.<\/p>\n<pre><code># Cria o diret\u00f3rio de trabalho no home do usu\u00e1rio\nmkdir -p ~\/projeto1\n\n# Entra no diret\u00f3rio criado\ncd ~\/projeto1\n\n# Cria o arquivo-fonte hello.c usando o editor nano\nnano hello.c<\/code><\/pre>\n<p>Dentro do editor, escreva o seguinte conte\u00fado completo. Este pequeno programa em C inclui a biblioteca padr\u00e3o de entrada e sa\u00edda, define a fun\u00e7\u00e3o principal <code>main<\/code> e imprime uma mensagem no terminal. \u00c9 o exemplo m\u00ednimo para demonstrar a compila\u00e7\u00e3o de software:<\/p>\n<pre><code>\/* Programa hello.c - Exemplo m\u00ednimo para compila\u00e7\u00e3o com GCC *\/\n#include &lt;stdio.h&gt;\n\nint main(void) {\n    printf(\"Hello, compila\u00e7\u00e3o de software no Linux!\\n\");\n    return 0;\n}<\/code><\/pre>\n<p>Salve o arquivo e saia do editor. Agora, vamos compilar o programa usando o comando <code>gcc<\/code>. A sintaxe b\u00e1sica \u00e9: <code>gcc [op\u00e7\u00f5es] [arquivo-fonte] -o [arquivo-de-sa\u00edda]<\/code>. A op\u00e7\u00e3o <code>-o<\/code> especifica o nome do execut\u00e1vel de sa\u00edda; se omitida, o GCC criar\u00e1 um arquivo chamado <code>a.out<\/code>. Vamos usar tamb\u00e9m as flags <code>-Wall<\/code> e <code>-Wextra<\/code>, que ativam avisos de compila\u00e7\u00e3o sobre poss\u00edveis erros no c\u00f3digo, e <code>-O2<\/code>, que aplica otimiza\u00e7\u00f5es de n\u00edvel 2.<\/p>\n<pre><code># Compila o hello.c gerando o execut\u00e1vel \"hello\"\ngcc -Wall -Wextra -O2 hello.c -o hello\n\n# Lista o diret\u00f3rio para confirmar a cria\u00e7\u00e3o do execut\u00e1vel\nls -l<\/code><\/pre>\n<p>A execu\u00e7\u00e3o do primeiro comando n\u00e3o deve exibir nenhuma mensagem, pois a compila\u00e7\u00e3o foi bem-sucedida e n\u00e3o h\u00e1 erros nem avisos. O segundo comando lista os arquivos do diret\u00f3rio, mostrando o arquivo-fonte <code>hello.c<\/code> e o novo execut\u00e1vel <code>hello<\/code>. Note que o execut\u00e1vel aparece com permiss\u00e3o de execu\u00e7\u00e3o (<code>-rwxr-xr-x<\/code>) e, em sistemas com GNU coreutils, \u00e9 exibido em cor verde para diferenci\u00e1-lo de arquivos comuns.<\/p>\n<pre><code class=\"output\">-rwxrwxr-x 1 aluno aluno 15984 Aug 21 10:15 hello\n-rw-rw-r-- 1 aluno aluno   148 Aug 21 10:12 hello.c<\/code><\/pre>\n<p>A sa\u00edda mostra que o arquivo <code>hello<\/code> tem 15.984 bytes e permiss\u00e3o de execu\u00e7\u00e3o, enquanto o <code>hello.c<\/code> tem 148 bytes. Agora, execute o programa para ver a sa\u00edda. O comando <code>.\/hello<\/code> informa ao shell que o execut\u00e1vel est\u00e1 no diret\u00f3rio atual, pois o diret\u00f3rio atual normalmente n\u00e3o est\u00e1 no <code>PATH<\/code> por motivos de seguran\u00e7a.<\/p>\n<pre><code># Executa o programa compilado\n.\/hello<\/code><\/pre>\n<p>A sa\u00edda esperada do programa \u00e9 a mensagem que definimos no c\u00f3digo-fonte. Se voc\u00ea vir essa mensagem, o processo de compila\u00e7\u00e3o e execu\u00e7\u00e3o funcionou corretamente, e voc\u00ea acaba de compilar seu primeiro software no Linux:<\/p>\n<pre><code class=\"output\">Hello, compila\u00e7\u00e3o de software no Linux!<\/code><\/pre>\n<p>Vamos agora explorar as etapas intermedi\u00e1rias da compila\u00e7\u00e3o. O GCC permite gerar o c\u00f3digo assembly, o arquivo-objeto e o execut\u00e1vel separadamente. Isso \u00e9 \u00fatil para entender o que acontece em cada fase e para diagnosticar problemas. Execute os comandos abaixo para gerar o c\u00f3digo assembly (<code>-S<\/code>), o arquivo-objeto (<code>-c<\/code>) e, por fim, linkar o objeto para criar o execut\u00e1vel final:<\/p>\n<pre><code># Gera o c\u00f3digo assembly de hello.c em hello.s\ngcc -S hello.c -o hello.s\n\n# Gera o arquivo-objeto hello.o sem linkar\ngcc -c hello.c -o hello.o\n\n# Linka o objeto hello.o e gera o execut\u00e1vel hello\ngcc hello.o -o hello\n\n# Lista todos os arquivos gerados em cada etapa\nls -l<\/code><\/pre>\n<p>Ap\u00f3s esses comandos, o diret\u00f3rio conter\u00e1 quatro arquivos: <code>hello.c<\/code> (fonte), <code>hello.s<\/code> (assembly), <code>hello.o<\/code> (objeto) e <code>hello<\/code> (execut\u00e1vel). O arquivo <code>hello.s<\/code> pode ser aberto com qualquer editor de texto para visualizar as instru\u00e7\u00f5es assembly geradas. O arquivo <code>hello.o<\/code> \u00e9 bin\u00e1rio e n\u00e3o deve ser editado. Experimente visualizar o assembly com <code>cat hello.s<\/code> para ver as instru\u00e7\u00f5es de baixo n\u00edvel. Esse conhecimento ser\u00e1 valioso quando voc\u00ea precisar otimizar c\u00f3digo em projetos avan\u00e7ados.<\/p>\n<h3>Automatizando a compila\u00e7\u00e3o com Make e Makefile<\/h3>\n<p>Em projetos com m\u00faltiplos arquivos-fonte, compilar manualmente cada arquivo com o GCC \u00e9 tedioso e propenso a erros. \u00c9 aqui que entra o <strong>Make<\/strong> e o arquivo <strong>Makefile<\/strong>. O Makefile define regras que descrevem como gerar os arquivos de um projeto, permitindo compila\u00e7\u00e3o incremental e automa\u00e7\u00e3o completa. Vamos criar um projeto com tr\u00eas arquivos de c\u00f3digo C e um Makefile que automatizar\u00e1 todo o processo de compila\u00e7\u00e3o de software.<\/p>\n<p>Primeiro, crie um novo diret\u00f3rio <code>projeto2<\/code> e os arquivos <code>main.c<\/code>, <code>utils.c<\/code> e <code>utils.h<\/code>. O arquivo <code>main.c<\/code> cont\u00e9m a fun\u00e7\u00e3o principal e chama uma fun\u00e7\u00e3o definida em <code>utils.c<\/code>. O arquivo <code>utils.h<\/code> \u00e9 um cabe\u00e7alho que declara a fun\u00e7\u00e3o para que o compilador saiba sua assinatura. Esse modelo de separa\u00e7\u00e3o \u00e9 padr\u00e3o em projetos reais de desenvolvimento em C.<\/p>\n<pre><code># Cria e entra no novo diret\u00f3rio de projeto\nmkdir -p ~\/projeto2\ncd ~\/projeto2\n\n# Cria o arquivo main.c\nnano main.c\n\n# Cria o arquivo utils.c\nnano utils.c\n\n# Cria o arquivo utils.h\nnano utils.h<\/code><\/pre>\n<p>O conte\u00fado completo de cada arquivo \u00e9 mostrado abaixo. Observe que <code>main.c<\/code> inclui o cabe\u00e7alho <code>utils.h<\/code> e chama <code>soma()<\/code> e <code>multiplica()<\/code>. O arquivo <code>utils.c<\/code> implementa essas fun\u00e7\u00f5es, e o <code>utils.h<\/code> declara seus prot\u00f3tipos. Essa separa\u00e7\u00e3o entre declara\u00e7\u00e3o e implementa\u00e7\u00e3o \u00e9 uma boa pr\u00e1tica e permite compila\u00e7\u00e3o separada de m\u00f3dulos.<\/p>\n<pre><code>\/* main.c - Fun\u00e7\u00e3o principal do programa *\/\n#include &lt;stdio.h&gt;\n#include \"utils.h\"\n\nint main(void) {\n    int a = 10, b = 5;\n    printf(\"Soma: %d\\n\", soma(a, b));\n    printf(\"Multiplica\u00e7\u00e3o: %d\\n\", multiplica(a, b));\n    return 0;\n}<\/code><\/pre>\n<pre><code>\/* utils.c - Implementa\u00e7\u00e3o das fun\u00e7\u00f5es utilit\u00e1rias *\/\n#include \"utils.h\"\n\nint soma(int x, int y) {\n    return x + y;\n}\n\nint multiplica(int x, int y) {\n    return x * y;\n}<\/code><\/pre>\n<pre><code>\/* utils.h - Cabe\u00e7alho com prot\u00f3tipos das fun\u00e7\u00f5es *\/\n#ifndef UTILS_H\n#define UTILS_H\n\nint soma(int x, int y);\nint multiplica(int x, int y);\n\n#endif<\/code><\/pre>\n<p>Agora, crie o arquivo <strong>Makefile<\/strong>. Este arquivo conter\u00e1 as regras de compila\u00e7\u00e3o, depend\u00eancias e comandos. Vamos definir vari\u00e1veis para o compilador, as flags e os arquivos do projeto. Em seguida, definimos alvos: <code>all<\/code> (padr\u00e3o), <code>projeto2<\/code> (execut\u00e1vel final), <code>main.o<\/code>, <code>utils.o<\/code> e <code>clean<\/code>. Cada regra possui uma linha de depend\u00eancias e uma ou mais linhas de comando, que devem come\u00e7ar com um <em>tab<\/em>, n\u00e3o com espa\u00e7os. Esse detalhe \u00e9 a causa mais comum de erros em Makefiles.<\/p>\n<pre><code># Makefile - Automa\u00e7\u00e3o da compila\u00e7\u00e3o do projeto2\n# Vari\u00e1veis de configura\u00e7\u00e3o\nCC      = gcc\nCFLAGS  = -Wall -Wextra -O2\nTARGET  = projeto2\nOBJS    = main.o utils.o\n\n# Alvo padr\u00e3o: compila o projeto completo\nall: $(TARGET)\n\n# Regra para gerar o execut\u00e1vel final a partir dos objetos\n$(TARGET): $(OBJS)\n\t$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)\n\n# Regra para compilar main.c em main.o\nmain.o: main.c utils.h\n\t$(CC) $(CFLAGS) -c main.c -o main.o\n\n# Regra para compilar utils.c em utils.o\nutils.o: utils.c utils.h\n\t$(CC) $(CFLAGS) -c utils.c -o utils.o\n\n# Alvo de limpeza: remove arquivos gerados\nclean:\n\trm -f $(OBJS) $(TARGET)\n\n# Declara esses alvos como phony para evitar conflito com arquivos de mesmo nome\n.PHONY: all clean<\/code><\/pre>\n<p>Vamos analisar este Makefile linha por linha. As vari\u00e1veis <code>CC<\/code>, <code>CFLAGS<\/code>, <code>TARGET<\/code> e <code>OBJS<\/code> centralizam as configura\u00e7\u00f5es, facilitando manuten\u00e7\u00e3o. O alvo <code>all<\/code> \u00e9 o primeiro e, portanto, o padr\u00e3o quando voc\u00ea executa <code>make<\/code> sem argumentos. A regra <code>$(TARGET): $(OBJS)<\/code> informa que o execut\u00e1vel depende dos arquivos-objeto; se qualquer <code>.o<\/code> for mais novo que o execut\u00e1vel, o make executar\u00e1 o comando para linkar. As regras para <code>main.o<\/code> e <code>utils.o<\/code> t\u00eam depend\u00eancia tamb\u00e9m no cabe\u00e7alho <code>.h<\/code>, garantindo recompila\u00e7\u00e3o quando o cabe\u00e7alho for modificado.<\/p>\n<p>O alvo <code>clean<\/code> remove os arquivos gerados, permitindo reconstru\u00e7\u00e3o limpa. A diretiva <code>.PHONY<\/code> declara que <code>all<\/code> e <code>clean<\/code> n\u00e3o s\u00e3o arquivos reais, evitando conflito caso exista um arquivo chamado <code>clean<\/code> no diret\u00f3rio. Agora, execute o <code>make<\/code> para compilar o projeto. O make ler\u00e1 o Makefile, verificar\u00e1 as depend\u00eancias e executar\u00e1 os comandos necess\u00e1rios na ordem correta.<\/p>\n<pre><code># Executa o make para compilar o projeto usando o Makefile\nmake<\/code><\/pre>\n<p>A sa\u00edda esperada do comando <code>make<\/code> mostra as etapas de compila\u00e7\u00e3o. O make exibe cada comando \u00e0 medida que o executa, permitindo ver exatamente o que est\u00e1 acontecendo. Primeiro, compila <code>main.c<\/code> para <code>main.o<\/code>; depois, compila <code>utils.c<\/code> para <code>utils.o<\/code>; por fim, linka os objetos e gera o execut\u00e1vel <code>projeto2<\/code>:<\/p>\n<pre><code class=\"output\">gcc -Wall -Wextra -O2 -c main.c -o main.o\ngcc -Wall -Wextra -O2 -c utils.c -o utils.o\ngcc -Wall -Wextra -O2 -o projeto2 main.o utils.o<\/code><\/pre>\n<p>Agora, execute o programa compilado para verificar seu funcionamento. O comando <code>.\/projeto2<\/code> executar\u00e1 o bin\u00e1rio e exibir\u00e1 o resultado das opera\u00e7\u00f5es de soma e multiplica\u00e7\u00e3o. A sa\u00edda esperada \u00e9 apresentada abaixo:<\/p>\n<pre><code># Executa o programa compilado pelo make\n.\/projeto2<\/code><\/pre>\n<pre><code class=\"output\">Soma: 15\nMultiplica\u00e7\u00e3o: 50<\/code><\/pre>\n<p>Um dos maiores benef\u00edcios do make \u00e9 a compila\u00e7\u00e3o incremental. Se voc\u00ea executar <code>make<\/code> novamente sem modificar nenhum arquivo, o make detectar\u00e1 que o execut\u00e1vel est\u00e1 atualizado e n\u00e3o executar\u00e1 nenhum comando, exibindo uma mensagem informativa. Isso economiza tempo em projetos grandes. Modifique o arquivo <code>utils.c<\/code> e execute <code>make<\/code> novamente; apenas <code>utils.o<\/code> ser\u00e1 recompilado e o execut\u00e1vel relinkado. Experimente tamb\u00e9m <code>make clean<\/code> para remover os arquivos gerados e depois <code>make<\/code> para reconstruir tudo.<\/p>\n<h3>Compilando software real a partir do c\u00f3digo-fonte<\/h3>\n<p>Agora que voc\u00ea domina os conceitos b\u00e1sicos de GCC e Make, vamos aplicar esse conhecimento na <strong>compila\u00e7\u00e3o de software<\/strong> real. Utilizaremos o <strong>htop<\/strong>, um monitor de processos interativo amplamente utilizado por administradores de sistemas, como exemplo pr\u00e1tico. O htop \u00e9 ideal porque seu c\u00f3digo-fonte \u00e9 relativamente pequeno, a compila\u00e7\u00e3o \u00e9 r\u00e1pida e as depend\u00eancias s\u00e3o m\u00ednimas, tornando-o perfeito para um ambiente de aprendizado.<\/p>\n<p>Baixe o tarball contendo o c\u00f3digo-fonte do htop a partir do GitHub. O comando <code>wget<\/code> far\u00e1 o download do arquivo <code>.tar.gz<\/code>. Em seguida, descompacte o tarball com <code>tar -xzf<\/code>, que extrai o conte\u00fado para um diret\u00f3rio. Ap\u00f3s a extra\u00e7\u00e3o, entre no diret\u00f3rio do c\u00f3digo-fonte e liste os arquivos para ver a estrutura do projeto, incluindo o script <code>configure<\/code> e o <code>Makefile.in<\/code>.<\/p>\n<pre><code># Baixa o c\u00f3digo-fonte do htop vers\u00e3o 3.3.0 do GitHub\nwget https:\/\/github.com\/htop-dev\/htop\/releases\/download\/3.3.0\/htop-3.3.0.tar.gz\n\n# Extrai o tarball para o diret\u00f3rio atual\ntar -xzf htop-3.3.0.tar.gz\n\n# Entra no diret\u00f3rio do c\u00f3digo-fonte extra\u00eddo\ncd htop-3.3.0\n\n# Lista os arquivos do projeto para ver a estrutura\nls -l<\/code><\/pre>\n<p>A sa\u00edda do <code>ls -l<\/code> mostrar\u00e1 os arquivos do projeto, incluindo <code>configure<\/code>, <code>Makefile.in<\/code>, <code>README<\/code>, <code>htop.c<\/code> e v\u00e1rios outros arquivos de c\u00f3digo-fonte. O script <code>configure<\/code> \u00e9 o respons\u00e1vel por preparar o build para o seu sistema. Antes de<\/p>\n<div style=\"margin:52px 0 40px;padding:36px 28px;background:linear-gradient(135deg,#0f172a 0%,#1a2744 100%);border:2px solid #25D366;border-radius:18px;text-align:center;box-shadow:0 4px 28px rgba(37,211,102,0.18)\">\n<p style=\"margin:0 0 10px;font-size:18px;color:#ffffff;font-weight:700;line-height:1.4\">Quer aprender na pr\u00e1tica com especialistas?<\/p>\n<p style=\"margin:0 0 28px;font-size:15px;color:#94a3b8;font-weight:400;line-height:1.6\">A JRT Technology Solutions oferece treinamentos e implementa\u00e7\u00e3o de Linux para equipes corporativas.<\/p>\n<p>  <a href=\"https:\/\/api.whatsapp.com\/send\/?phone=5521980606699&#038;text=Ol%C3%A1!%20Tenho%20interesse%20no%20treinamento%20de%20Linux.&#038;type=phone_number&#038;app_absent=0\"\n     target=\"_blank\" rel=\"noopener noreferrer\"\n     style=\"display:inline-flex;align-items:center;gap:12px;background:#25D366;color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:16px;font-weight:700;padding:15px 32px;border-radius:100px;text-decoration:none;box-shadow:0 4px 16px rgba(37,211,102,0.45);letter-spacing:0.01em\"><br \/>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"#ffffff\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\"\/><\/svg><br \/>\n    Falar no WhatsApp<br \/>\n  <\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de &#8230; <a title=\"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential\" class=\"read-more\" href=\"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/\" aria-label=\"Read more about Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential\">Ler mais<\/a><\/p>\n","protected":false},"author":1,"featured_media":2378,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"iawp_total_views":0,"footnotes":""},"categories":[62],"tags":[3349],"class_list":["post-2379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-linux-do-zero-ao-avancado-compilacao-de-software-make-gcc-e-build-essential"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Thiago Paes Rodrigues\"\/>\n\t<meta name=\"google-site-verification\" content=\"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_BR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"100\" \/>\n\t\t<meta property=\"og:image:height\" content=\"75\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-21T21:01:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-21T21:01:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61590814880509\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#blogposting\",\"name\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions\",\"headline\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\",\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ai-image-1787346055483.jpg\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\"},\"datePublished\":\"2026-08-21T18:01:04-03:00\",\"dateModified\":\"2026-08-21T18:01:04-03:00\",\"inLanguage\":\"pt-BR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#webpage\"},\"articleSection\":\"Linux, Linux \\u2014 Do Zero ao Avan\\u00e7ado: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/linux\\\/#listItem\",\"name\":\"Linux\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/linux\\\/#listItem\",\"position\":2,\"name\":\"Linux\",\"item\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/linux\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#listItem\",\"name\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#listItem\",\"position\":3,\"name\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/category\\\/linux\\\/#listItem\",\"name\":\"Linux\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"telephone\":\"+552138277513\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/cropped-logo-mini.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#organizationLogo\",\"width\":100,\"height\":75},\"image\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61590814880509\",\"https:\\\/\\\/www.instagram.com\\\/jrtx.tech\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/\",\"name\":\"Thiago Paes Rodrigues\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#authorImage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/cropped-foto-rascunho3-96x96.jpeg\",\"width\":96,\"height\":96,\"caption\":\"Thiago Paes Rodrigues\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#webpage\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/\",\"name\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions\",\"description\":\"A compila\\u00e7\\u00e3o de software \\u00e9 um dos pilares da administra\\u00e7\\u00e3o avan\\u00e7ada de sistemas Linux. Ao contr\\u00e1rio da instala\\u00e7\\u00e3o via pacotes bin\\u00e1rios \\u2014 como apt, dnf ou yum \\u2014, compilar um programa a partir do c\\u00f3digo-fonte coloca voc\\u00ea no controle total do processo: voc\\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\\u00e1rio para uma arquitetura de\",\"inLanguage\":\"pt-BR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/author\\\/thiago\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/ai-image-1787346055483.jpg\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#mainImage\",\"width\":1440,\"height\":1024,\"caption\":\"Aula 25: Compila\\u00e7\\u00e3o de software \\u2014 make, gcc e build-essential\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/2026\\\/08\\\/21\\\/aula-25-compilacao-de-software-make-gcc-e-build-essential\\\/#mainImage\"},\"datePublished\":\"2026-08-21T18:01:04-03:00\",\"dateModified\":\"2026-08-21T18:01:04-03:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/\",\"name\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"alternateName\":\"JRT Technology Solutions | Tecnologia e Inova\\u00e7\\u00e3o para Empresas\",\"description\":\"Um espa\\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\\u00e1tica e atual. Aqui voc\\u00ea encontra novidades, an\\u00e1lises, tutoriais e reflex\\u00f5es sobre inova\\u00e7\\u00e3o, intelig\\u00eancia artificial, gadgets, programa\\u00e7\\u00e3o e tend\\u00eancias digitais. Nosso objetivo \\u00e9 simplificar o complexo, ajudar voc\\u00ea a se manter atualizado e transformar conhecimento em pr\\u00e1tica no seu dia a dia.\",\"inLanguage\":\"pt-BR\",\"publisher\":{\"@id\":\"https:\\\/\\\/jrtx.com.br\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions","description":"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de","canonical_url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"QKPfpDCzHmzKyfFk5j1KZW3HhROYTPeqwBN5qcJ8qcg","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#blogposting","name":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions","headline":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential","author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/08\/ai-image-1787346055483.jpg","width":1440,"height":1024,"caption":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential"},"datePublished":"2026-08-21T18:01:04-03:00","dateModified":"2026-08-21T18:01:04-03:00","inLanguage":"pt-BR","mainEntityOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#webpage"},"isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#webpage"},"articleSection":"Linux, Linux \u2014 Do Zero ao Avan\u00e7ado: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential"},{"@type":"BreadcrumbList","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","position":1,"name":"Home","item":"https:\/\/jrtx.com.br\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/linux\/#listItem","name":"Linux"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/linux\/#listItem","position":2,"name":"Linux","item":"https:\/\/jrtx.com.br\/blog\/category\/linux\/","nextItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#listItem","name":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential"},"previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#listItem","position":3,"name":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential","previousItem":{"@type":"ListItem","@id":"https:\/\/jrtx.com.br\/blog\/category\/linux\/#listItem","name":"Linux"}}]},{"@type":"Organization","@id":"https:\/\/jrtx.com.br\/blog\/#organization","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","url":"https:\/\/jrtx.com.br\/blog\/","telephone":"+552138277513","logo":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#organizationLogo","width":100,"height":75},"image":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61590814880509","https:\/\/www.instagram.com\/jrtx.tech\/"]},{"@type":"Person","@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author","url":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/","name":"Thiago Paes Rodrigues","image":{"@type":"ImageObject","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#authorImage","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/09\/cropped-foto-rascunho3-96x96.jpeg","width":96,"height":96,"caption":"Thiago Paes Rodrigues"}},{"@type":"WebPage","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#webpage","url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/","name":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions","description":"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de","inLanguage":"pt-BR","isPartOf":{"@id":"https:\/\/jrtx.com.br\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#breadcrumblist"},"author":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"creator":{"@id":"https:\/\/jrtx.com.br\/blog\/author\/thiago\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/08\/ai-image-1787346055483.jpg","@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#mainImage","width":1440,"height":1024,"caption":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential"},"primaryImageOfPage":{"@id":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/#mainImage"},"datePublished":"2026-08-21T18:01:04-03:00","dateModified":"2026-08-21T18:01:04-03:00"},{"@type":"WebSite","@id":"https:\/\/jrtx.com.br\/blog\/#website","url":"https:\/\/jrtx.com.br\/blog\/","name":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","alternateName":"JRT Technology Solutions | Tecnologia e Inova\u00e7\u00e3o para Empresas","description":"Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","inLanguage":"pt-BR","publisher":{"@id":"https:\/\/jrtx.com.br\/blog\/#organization"}}]},"og:locale":"pt_BR","og:site_name":"BLOG - JRT Technology Solutions - Um espa\u00e7o dedicado a explorar o universo da tecnologia de forma clara, pr\u00e1tica e atual. Aqui voc\u00ea encontra novidades, an\u00e1lises, tutoriais e reflex\u00f5es sobre inova\u00e7\u00e3o, intelig\u00eancia artificial, gadgets, programa\u00e7\u00e3o e tend\u00eancias digitais. Nosso objetivo \u00e9 simplificar o complexo, ajudar voc\u00ea a se manter atualizado e transformar conhecimento em pr\u00e1tica no seu dia a dia.","og:type":"article","og:title":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions","og:description":"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de","og:url":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/","og:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:secure_url":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg","og:image:width":100,"og:image:height":75,"article:published_time":"2026-08-21T21:01:04+00:00","article:modified_time":"2026-08-21T21:01:04+00:00","article:publisher":"https:\/\/www.facebook.com\/profile.php?id=61590814880509","twitter:card":"summary_large_image","twitter:title":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential - BLOG - JRT Technology Solutions","twitter:description":"A compila\u00e7\u00e3o de software \u00e9 um dos pilares da administra\u00e7\u00e3o avan\u00e7ada de sistemas Linux. Ao contr\u00e1rio da instala\u00e7\u00e3o via pacotes bin\u00e1rios \u2014 como apt, dnf ou yum \u2014, compilar um programa a partir do c\u00f3digo-fonte coloca voc\u00ea no controle total do processo: voc\u00ea pode habilitar ou desabilitar funcionalidades, otimizar o bin\u00e1rio para uma arquitetura de","twitter:image":"https:\/\/jrtx.com.br\/blog\/wp-content\/uploads\/2026\/03\/cropped-logo-mini.jpg"},"aioseo_meta_data":{"post_id":"2379","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-08-24 17:50:38","updated":"2026-08-24 17:50:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/jrtx.com.br\/blog\/category\/linux\/\" title=\"Linux\">Linux<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/jrtx.com.br\/blog"},{"label":"Linux","link":"https:\/\/jrtx.com.br\/blog\/category\/linux\/"},{"label":"Aula 25: Compila\u00e7\u00e3o de software \u2014 make, gcc e build-essential","link":"https:\/\/jrtx.com.br\/blog\/2026\/08\/21\/aula-25-compilacao-de-software-make-gcc-e-build-essential\/"}],"_links":{"self":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/2379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/comments?post=2379"}],"version-history":[{"count":0,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/posts\/2379\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media\/2378"}],"wp:attachment":[{"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/media?parent=2379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/categories?post=2379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jrtx.com.br\/blog\/wp-json\/wp\/v2\/tags?post=2379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}