.SO

Arquivo SO

Shared Object (ELF shared library)
Fazer uma pergunta
RESPOSTA RÁPIDA

Um arquivo .so é uma biblioteca de objetos compartilhados no Linux e Unix - o equivalente no Linux a um .dll do Windows. Os programas o carregam automaticamente durante a execução; você nunca o abre diretamente. Se um aplicativo falhar com um erro «cannot open shared object file», instale a biblioteca ausente por meio do gerenciador de pacotes da sua distribuição (apt, dnf, pacman) em vez de baixar o arquivo de um site.

Desenvolvedor: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Categoria: Arquivos de Sistema Padrão aberto MIME: application/x-sharedlib
ABRE EM macOS Linux
Relacionado: .NOMEDIA · .DLL · .TMP · .LNK

Nesta página

19k+ extensões indexadas
Última revisão em Jun 17, 2026

Não tem certeza do que é seu arquivo?

Arraste qualquer arquivo para o nosso identificador - lemos apenas os primeiros bytes para nomear o formato.

Identificar um arquivo

O que é o formato de ficheiro SO?

Um arquivo .so contém uma biblioteca compartilhada carregada dinamicamente para aplicativos Unix e Linux. .so é um arquivo binário usado para fornecer acesso a código e dados compartilhados que um ou mais programas podem usar quando iniciados. A extensão significa Shared Object (Objeto Compartilhado), refletindo o fato de que, uma vez que a biblioteca é carregada na memória, seus objetos - funções e dados - podem ser acessados por vários processos simultaneamente. O tipo MIME registrado para arquivos .so é application/x-sharedlib.

As bibliotecas .so são objetos ELF (abreviação de Executable and Linkable Format), o formato binário padrão usado no Linux e em muitos sistemas do tipo Unix para executáveis, objetos compilados, bibliotecas compartilhadas e core dumps. Todo arquivo ELF válido - incluindo arquivos .so - começa com o número mágico de quatro bytes \x7FELF no deslocamento 0. A estrutura do arquivo compreende:

  • Cabeçalho ELF - define arquitetura, endianness e bitness (32 bits ou 64 bits), além da contagem de entradas nas tabelas de segmentos e seções,
  • Tabela de cabeçalho do programa - descreve os segmentos de memória usados no momento do carregamento,
  • Tabela de cabeçalho de seção - descreve seções individuais usadas pelo vinculador e depurador,
  • Dados referenciados por esses cabeçalhos.

Os segmentos são usados durante a execução do programa e podem ser compostos de várias seções; as seções são usadas durante a operação de vinculação. Arquivos .so podem ser vinculados a um programa em tempo de compilação ou carregados em tempo de execução via dlopen().

Os nomes de arquivos .so seguem uma convenção de nomenclatura em que o nome da biblioteca é precedido por um prefixo lib - por exemplo, uma biblioteca chamada abc terá o nome de arquivo libabc.so, e a flag -labc é usada ao vincular a ela. O sufixo .so pode ser seguido por um número de versão, como libabc.so.3 para o arquivo de versão principal ou libabc.so.3.1.2 para uma compilação com versão completa. Na prática, libabc.so geralmente é apenas um link simbólico apontando para o arquivo versionado real, e libabc.so.3 pode ser ele próprio um symlink para a versão compatível mais recente. A versão armazenada na entrada dinâmica DT_SONAME é o que o vinculador de tempo de execução ld.so registra e verifica. Algumas bibliotecas de sistema de baixo nível - como o próprio ld.so - não seguem a convenção do prefixo lib.

No Windows, o conceito equivalente é um arquivo .DLL; no macOS, é um arquivo .dylib. Alternativas estáticas no Linux são arquivadas em arquivos .a.

Segurança e proteção

RISCO: MEDIUM

Um .so é um código nativo executável que roda dentro de qualquer processo que o carregue, portanto, uma biblioteca compartilhada maliciosa pode fazer qualquer coisa que o programa hospedeiro possa. Os riscos reais: (1) sequestro de biblioteca - um .so malicioso colocado onde o carregador pesquisa primeiro, ou abuso de LD_PRELOAD/LD_LIBRARY_PATH, pode injetar código em um programa legítimo; (2) baixar arquivos .so individuais de sites aleatórios para corrigir um erro - estes podem ser maliciosos ou incompatíveis com a ABI e podem quebrar ou comprometer o sistema. Sempre instale bibliotecas dos repositórios de pacotes assinados da sua distribuição. Excluir arquivos .so do sistema (em /lib, /usr/lib) pode tornar o sistema operacional ou os aplicativos não inicializáveis.

Detalhes do formato

em resumo
NOME COMPLETOShared Object (ELF shared library)
DESENVOLVEDORUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)desde ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
TIPO MIMEapplication/x-sharedlib
TIPOBiblioteca compartilhada ELF (Executable and Linkable Format) - código de máquina nativo compilado
PADRÃOAberto · livre de royalties
MAGIC BYTES · ASSINATURA DO ARQUIVO
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
Os primeiros quatro bytes são 0x7F seguidos por «ELF». O byte 4 (EI_CLASS) é 1 para 32 bits / 2 para 64 bits; o byte 5 (EI_DATA) é a endianness; o campo e_type (deslocamento 16) é ET_DYN (0x0003) para um objeto compartilhado. O mesmo cabeçalho ELF é usado por executáveis e arquivos de objeto do Linux, portanto, a designação .so vem do e_type + função do arquivo, não de um número mágico separado.

Programas que abrem arquivos SO

macOS1 app
binutils / file / Ghidra Código aberto O macOS usa .dylib nativamente, mas arquivos .so do Linux podem ser inspecionados com cross-binutils ou Ghidra. «file lib.so» confirma que é um objeto compartilhado ELF.
Linux4 apps
System dynamic linker (ld.so) + package manager Integrado Você não «abre» um .so - o carregador o usa automaticamente. Para corrigir um ausente, instale o pacote que o fornece: «apt install libfoo» / «dnf install foo» / «pacman -S foo». Use «ldconfig» para atualizar o cache.
binutils (nm / objdump / readelf) Código aberto Inspecione um .so na linha de comando: «nm -D lib.so» lista símbolos, «readelf -d lib.so» mostra o SONAME/dependências, «objdump -d lib.so» desmonta o código.
ldd Integrado «ldd ./programa» ou «ldd lib.so» lista quais objetos compartilhados são necessários e se cada um é resolvido - a primeira coisa a executar para um erro de «.so ausente».
Ghidra Código aberto Importe o .so para desmontagem/descompilação completa ao fazer engenharia reversa de código nativo (também funciona em Windows/macOS).

Detalhes técnicos

especificação profunda
Tipo MIMEapplication/x-sharedlib
Bytes mágicos7F 45 4C 46 («\x7FELF») no deslocamento 0 - magia idêntica a todos os arquivos ELF; o campo e_type distingue objetos compartilhados
Valor ELF e_typeET_DYN (0x0003) - distingue um objeto compartilhado de um executável (ET_EXEC = 0x0002) ou objeto realocável (ET_REL = 0x0001)
BitnessByte EI_CLASS no deslocamento 4: 1 = 32 bits (Elf32), 2 = 64 bits (Elf64); ambas as variantes são amplamente implantadas no Linux
EndiannessByte EI_DATA no deslocamento 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); específico da arquitetura
Código independente de posiçãoDeve ser compilado com -fPIC para que a biblioteca possa ser mapeada para qualquer endereço virtual sem conflitos de realocação entre processos
Tabela de símbolos dinâmicosA seção .dynsym exporta e importa símbolos visíveis em tempo de execução; .dynstr contém as strings de nomes correspondentes
PLT / GOTProcedure Linkage Table e Global Offset Table permitem a resolução de símbolos preguiçosa (padrão) ou imediata (-z now) no momento do carregamento
soname (DT_SONAME)Nome canônico da biblioteca incorporado na seção dinâmica ELF; o ld.so registra esse nome quando um programa é vinculado, permitindo o rastreamento da versão ABI independentemente do nome do arquivo
Versionamento de símbolosAs seções .gnu.version e .gnu.version_r permitem várias versões de símbolos em um único arquivo, possibilitando a evolução da ABI com compatibilidade reversa
Vinculador de tempo de execuçãoCarregado por ld.so / ld-linux-x86-64.so.2; caminho de busca controlado por LD_LIBRARY_PATH, DT_RUNPATH, ou /etc/ld.so.conf + cache ldconfig
Convenção de nomenclaturalib<nome>.so[.maior[.menor.patch]]; libabc.so é tipicamente um symlink de desenvolvimento → libabc.so.3 → libabc.so.3.1.2
Caminho de busca incorporadoEntradas dinâmicas DT_RPATH ou DT_RUNPATH gravam caminhos de busca de biblioteca no arquivo em tempo de vinculação; DT_RUNPATH é preferido, pois pode ser substituído por LD_LIBRARY_PATH
Ferramentas de inspeçãoreadelf -a, objdump -d, nm --dynamic (binutils); ldd para listagem de dependências; comando file identifica o tipo ELF e a arquitetura
LançadoELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Padrão abertoSim · livre de royalties
Especificaçãorefspecs.linuxfoundation.org

Conversões de SO

Perguntas e Respostas da Comunidade

perguntado por usuários
Faça uma pergunta rápida
Obtenha ajuda de pessoas que trabalham com arquivos SO. Seja específico - inclua seu sistema e a versão do software.
Não é necessário criar conta · respostas geralmente em um dia

Ainda não há perguntas - seja o primeiro a perguntar sobre arquivos SO.

Perguntas frequentes

Como corrijo o erro 'error while loading shared libraries: libXXX.so' no Linux?
Instale o pacote que fornece a biblioteca com seu gerenciador de pacotes (ex: «sudo apt install libxxx» no Debian/Ubuntu, «sudo dnf install xxx» no Fedora). Pesquise com «apt-file search libxxx.so» ou na busca de pacotes da sua distro. Não baixe o .so de um site.
O que é um arquivo .so?
Um objeto compartilhado - uma biblioteca vinculada dinamicamente de código compilado no Linux/Unix, o equivalente a um .dll do Windows. Os programas o carregam em tempo de execução para que possam compartilhar códigos comuns em vez de cada um agrupar uma cópia.
Um .so é o mesmo que um DLL do Windows?
Funcionalmente sim - ambos são bibliotecas compartilhadas dinâmicas carregadas em tempo de execução. Mas eles não são intercambiáveis: .so é código ELF para Linux/Unix, .dll é código PE para Windows. Você não pode executar um no sistema operacional do outro.
Posso abrir ou executar um arquivo .so diretamente?
Não - ele não tem ponto de entrada e é carregado por outros programas, não iniciado por conta própria. Para olhar dentro dele, use ferramentas de desenvolvedor: «nm -D», «readelf -d», «objdump -d» ou descompile com Ghidra.
Por que os arquivos .so têm números como libssl.so.3?
Esses são números de versão. libssl.so geralmente é uma cadeia de symlinks apontando para um arquivo versionado específico (libssl.so.3 -> libssl.so.3.0.2). O SONAME incorporado permite que o carregador escolha uma versão compatível, para que programas antigos continuem funcionando quando uma biblioteca é atualizada.
Posso excluir arquivos .so para liberar espaço?
Não os que estão nos diretórios de bibliotecas do sistema - os programas e o sistema operacional dependem deles, e removê-los causa erros de «cannot open shared object file». Remova bibliotecas apenas desinstalando o pacote correspondente através do gerenciador de pacotes.

Referências

1GNU Binutils - nm/objdump/readelf documentationwww.gnu.org
2Linux Foundation - ELF (Executable and Linkable Format) specificationrefspecs.linuxfoundation.org

Continue explorando

em todo o banco de dados

Principais extensões desta semana

1.AQQAQQ Instant Messenger File
2.MDMarkdown Document
3.BINCD/DVD Disc Image (BIN/CUE)
4.RPMSGRestricted Permission Message
5.PARTPartial Download File
6.CRDOWNLOADChrome Partial Download File
7.NOMEDIAAndroid No-Media Marker File
8.PRDXSoftMaker Presentations Document
9.PRO6XProPresenter 6 Bundle File
10.SWFSmall Web Format (Shockwave Flash)

Extensões relacionadas

.NOMEDIAAndroid No-Media Marker File
.DLLDynamic Link Library
.TMPTemporary File
.LNKWindows Shell Link (Shortcut)
.PKGmacOS Installer Package
.ETLEvent Trace Log

Ferramentas de arquivo gratuitas

Um identificador de arquivos e conversor de imagens no navegador - tudo funciona no seu dispositivo.

Abrir a caixa de ferramentas

Navegar por extensões de arquivo A-Z