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.oCriando 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.oVinculando 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 appVantagens 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.oCriando 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.soVinculando 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 appEncontrando 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=. ./appVantagens 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
.sobeneficia todos os programas sem revinculação - Porém, o programa não inicia se o
.soestiver 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 applista as bibliotecas compartilhadas de que o carregador precisará em tempo de execuçãonm libmymath.alista 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.aVerificaçã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
-Le-l; bibliotecas compartilhadas precisam de um caminho de pesquisa em tempo de execução, comoLD_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
- Compilação condicional
- Projetos com vários arquivos
- Makefiles
- Bibliotecas estáticas e compartilhadas