0Pricing
C Academy · Aula

Bibliotecas estáticas e compartilhadas

Compile e vincule bibliotecas.

Bibliotecas estáticas e compartilhadas é uma aula grátis de C Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

O que é uma biblioteca

Uma biblioteca é um conjunto de arquivos de objeto compilados que você pode reutilizar em vários programas sem recompilar o código-fonte todas as vezes.

Em C, há dois tipos:

  • Bibliotecas estáticas (.a), copiadas para o executável no momento da vinculação
  • Bibliotecas compartilhadas (.so), carregadas em tempo de execução

Compilando arquivos de objeto

Os dois tipos começam com arquivos de objeto. Compile seus códigos-fonte com -c, como de costume.

Esses arquivos .o são a matéria-prima que o arquivador ou o vinculador empacotará.

gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.o

Criando uma biblioteca estática

O arquivador ar reúne arquivos de objeto em um arquivo .a. O nome convencional é lib<name>.a.

As opções significam: r inserir, c criar se necessário, s gravar um índice.

ar rcs libmymath.a mathlib.o strlib.o

Vinculando uma biblioteca estática

Faça a vinculação com -L para o diretório de pesquisa e -l para o nome da biblioteca (remova o prefixo lib e o sufixo .a).

O código necessário é copiado para o executável, que então funciona de forma independente.

gcc main.c -L. -lmymath -o app

Vantagens e desvantagens da vinculação estática

A vinculação estática é simples e autocontida:

  • O executável contém tudo; não há dependência em tempo de execução
  • Porém, cada programa que contém uma cópia produz binários maiores
  • Corrigir um erro da biblioteca exige revincular todos os programas que a utilizavam

Código independente de posição

Bibliotecas compartilhadas podem ser carregadas em qualquer endereço de memória, portanto seu código precisa ser independente de posição. Compile com -fPIC.

Isso gera código que usa endereçamento relativo em vez de endereços fixos.

gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.o

Criando uma biblioteca compartilhada

Compile o .so com -shared. A convenção é lib<name>.so.

Ao contrário de um arquivo estático, este é um objeto vinculado real que o carregador pode mapear em tempo de execução.

gcc -shared mathlib.o strlib.o -o libmymath.so

Vinculando uma biblioteca compartilhada

A vinculação é igual à do caso estático. A diferença é que o código não é copiado; apenas uma referência é registrada.

O executável permanece pequeno, mas agora depende de encontrar libmymath.so em tempo de execução.

gcc main.c -L. -lmymath -o app

Encontrando a biblioteca em tempo de execução

Na inicialização, o carregador dinâmico pesquisa caminhos padrão pelo .so. Uma biblioteca no diretório atual não está nessa lista.

Indique esse caminho ao carregador com LD_LIBRARY_PATH (Linux) para testes.

LD_LIBRARY_PATH=. ./app

Vantagens e desvantagens das bibliotecas compartilhadas

As bibliotecas compartilhadas trocam simplicidade por flexibilidade:

  • Uma única cópia na memória é compartilhada por vários programas, economizando RAM e espaço em disco
  • Uma correção de erro no .so beneficia todos os programas sem revinculação
  • Porém, o programa não inicia se o .so estiver ausente ou for incompatível

Esse último risco é o clássico 'inferno das dependências'.

Inspecionando dependências

Duas ferramentas ajudam você a ver com quais bibliotecas um binário é vinculado:

  • ldd app lista as bibliotecas compartilhadas de que o carregador precisará em tempo de execução
  • nm libmymath.a lista os símbolos (funções) dentro de uma biblioteca

Se ldd exibir 'not found', o carregador não conseguirá localizar esse .so no caminho de pesquisa.

ldd app
nm libmymath.a

Verificação rápida

Associe a opção ao objetivo.

Recapitulação

Agora você já consegue compilar e vincular os dois tipos de biblioteca:

  • Estática: ar rcs libX.a *.o, código copiado para o binário, autocontida, mas maior
  • Compartilhada: compile com -fPIC, crie com -shared, código carregado em tempo de execução
  • Vincule ambas com -L e -l; bibliotecas compartilhadas precisam de um caminho de pesquisa em tempo de execução, como LD_LIBRARY_PATH

Agora você tem toda a cadeia de ferramentas, do pré-processador à compilação.

Perguntas Frequentes

A aula “Bibliotecas estáticas e compartilhadas” é grátis?

Sim — o texto completo de “Bibliotecas estáticas e compartilhadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Bibliotecas estáticas e compartilhadas”?

Compile e vincule bibliotecas. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Bibliotecas estáticas e compartilhadas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Compilação condicional
  2. Projetos com vários arquivos
  3. Makefiles
  4. Bibliotecas estáticas e compartilhadas
← Voltar para C Academy