.SO

SO-fil

Shared Object (ELF shared library)
Stil et spørgsmål
HURTIGT SVAR

En .so-fil er et delt objektbibliotek på Linux og Unix - Linux-modstykket til en Windows .dll. Programmer indlæser den automatisk ved kørsel; du åbner den aldrig direkte. Hvis en app fejler med fejlen «cannot open shared object file», skal du installere det manglende bibliotek via din distributions pakkehåndtering (apt, dnf, pacman) i stedet for at downloade filen fra en hjemmeside.

Udvikler: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Kategori: Systemfiler Åben standard MIME: application/x-sharedlib
ÅBNER PÅ macOS Linux
Relateret: .NOMEDIA · .DLL · .TMP · .LNK

På denne side

19k+ filtyper indekseret
Sidst gennemset Jun 17, 2026

Er du ikke sikker på, hvad din fil er?

Træk en fil over i vores identifikator - vi læser kun de første bytes for at navngive formatet.

Identificer en fil

Hvad er SO-filformatet?

En .so-fil indeholder et dynamisk indlæst delt bibliotek til Unix- og Linux-applikationer. .so er en binær fil, der bruges til at give adgang til delt kode og data, som et eller flere programmer kan bruge, når de startes. Udvidelsen står for Shared Object, hvilket afspejler det faktum, at når biblioteket først er indlæst i hukommelsen, kan dets objekter - funktioner og data - tilgås af flere processer samtidigt. Den registrerede MIME-type for .so-filer er application/x-sharedlib.

.so-biblioteker er ELF-objekter (forkortelse for Executable and Linkable Format), som er det standardiserede binære format, der bruges på tværs af Linux og mange Unix-lignende systemer til eksekverbare filer, kompilerede objekter, delte biblioteker og core dumps. Enhver gyldig ELF-fil - inklusive .so-filer - begynder med det fire-byte magiske nummer \x7FELF ved offset 0. Filstrukturen består af:

  • ELF-header - definerer arkitektur, endianness og bit-version (32-bit eller 64-bit), samt antallet af poster i segment- og sektionstabellerne,
  • Program-headertabel - beskriver hukommelsessegmenter, der bruges ved indlæsning,
  • Sektions-headertabel - beskriver individuelle sektioner, der bruges af linkeren og debuggeren,
  • Data refereret af disse headere.

Segmenter bruges under programafvikling og kan bestå af flere sektioner; sektioner bruges under linking-processen. .so-filer kan linkes ind i et program ved kompilering eller indlæses ved kørsel via dlopen().

.so-filnavne følger en navngivningskonvention, hvor biblioteksnavnet indledes med et lib-præfiks - for eksempel vil et bibliotek ved navn abc have filnavnet libabc.so, og flaget -labc bruges ved linking mod det. .so-suffikset kan efterfølges af et versionsnummer, såsom libabc.so.3 for hovedversionsfilen eller libabc.so.3.1.2 for et fuldt versioneret build. I praksis er libabc.so ofte kun et symbolsk link, der peger på den rigtige versionerede fil, og libabc.so.3 kan i sig selv være et symlink til den nyeste kompatible udgivelse. Versionen gemt i den dynamiske post DT_SONAME er det, som runtime-linkeren ld.so registrerer og kontrollerer. Nogle lavniveau-systembiblioteker - såsom selve ld.so - følger ikke lib-præfiks-konventionen.

På Windows er det tilsvarende koncept en .DLL-fil; på macOS er det en .dylib-fil. Statiske alternativer på Linux er arkiveret i .a-filer.

Sikkerhed og tryghed

RISIKO: MEDIUM

En .so er eksekverbar native kode, der kører inde i den proces, der indlæser den, så et ondsindet delt bibliotek kan gøre alt, hvad værtsprogrammet kan. De reelle risici: (1) bibliotekskapring - en falsk .so placeret hvor indlæseren søger først, eller misbrug af LD_PRELOAD/LD_LIBRARY_PATH, kan injicere kode i et legitimt program; (2) download af individuelle .so-filer fra tilfældige hjemmesider for at rette en fejl - disse kan være ondsindede eller ABI-inkompatible og kan ødelægge eller kompromittere systemet. Installer altid biblioteker fra din distributions signerede pakke-arkiver. Sletning af system-.so-filer (i /lib, /usr/lib) kan gøre operativsystemet eller apps ude af stand til at starte.

Formatdetaljer

kort fortalt
FULDSTÆNDIGT NAVNShared Object (ELF shared library)
UDVIKLERUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)siden ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
KATEGORISystemfiler
MIME-TYPEapplication/x-sharedlib
TYPEELF (Executable and Linkable Format) delt bibliotek - kompileret native maskinkode
STANDARDÅben · royaltyfri
MAGIC BYTES · FILSIGNATUR
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
De første fire bytes er 0x7F efterfulgt af «ELF». Byte 4 (EI_CLASS) er 1 for 32-bit / 2 for 64-bit; byte 5 (EI_DATA) er endianness; e_type-feltet (offset 16) er ET_DYN (0x0003) for et delt objekt. Den samme ELF-header bruges af Linux-eksekverbare filer og objektfiler, så .so-betegnelsen kommer fra e_type + filrolle, ikke et separat magisk nummer.

Programmer der åbner SO-filer

macOS1 app
binutils / file / Ghidra Open-source macOS bruger .dylib indfødt, men Linux .so-filer kan undersøges med cross-binutils eller Ghidra. 'file lib.so' bekræfter, at det er et ELF delt objekt.
Linux4 apps
System dynamic linker (ld.so) + package manager Indbygget Du 'åbner' ikke en .so - indlæseren bruger den automatisk. For at rette en manglende fil skal du installere pakken, der leverer den: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Brug 'ldconfig' til at opdatere cachen.
binutils (nm / objdump / readelf) Open-source Undersøg en .so på kommandolinjen: 'nm -D lib.so' viser symboler, 'readelf -d lib.so' viser SONAME/afhængigheder, 'objdump -d lib.so' disassembler.
ldd Indbygget 'ldd ./program' eller 'ldd lib.so' viser hvilke delte objekter den har brug for, og om de kan findes - det første man bør køre ved en 'manglende .so'-fejl.
Ghidra Open-source Importer .so-filen for fuld disassemblering/dekompilering ved reverse-engineering af native kode (kører også på Windows/macOS).

Tekniske detaljer

dyb specifikation
MIME-typeapplication/x-sharedlib
Magic bytes7F 45 4C 46 ("\x7FELF") ved fil-offset 0 - identisk magi for alle ELF-filer; e_type-feltet skelner delte objekter
ELF e_type værdiET_DYN (0x0003) - skelner et delt objekt fra en eksekverbar fil (ET_EXEC = 0x0002) eller et relokerbart objekt (ET_REL = 0x0001)
BitnessEI_CLASS byte ved offset 4: 1 = 32-bit (Elf32), 2 = 64-bit (Elf64); begge varianter er udbredte på Linux
EndiannessEI_DATA byte ved offset 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); arkitekturspecifik
Positionsuafhængig kodeSkal kompileres med -fPIC, så biblioteket kan mappes til enhver virtuel adresse uden relokeringskonflikter mellem processer
Dynamisk symboltabel.dynsym-sektionen eksporterer og importerer symboler, der er synlige ved kørsel; .dynstr indeholder de tilsvarende navnestrenge
PLT / GOTProcedure Linkage Table og Global Offset Table muliggør doven (standard) eller ivrig (-z now) symbolopløsning ved indlæsning
soname (DT_SONAME)Kanonisk biblioteksnavn indlejret i den dynamiske ELF-sektion; ld.so registrerer dette navn, når et program linkes, hvilket muliggør sporing af ABI-version uafhængigt af filnavnet
Symbolversionering.gnu.version og .gnu.version_r sektioner tillader flere symbolversioner i én fil, hvilket muliggør bagudkompatibel ABI-udvikling
Runtime-linkerIndlæses af ld.so / ld-linux-x86-64.so.2; søgesti kontrolleres af LD_LIBRARY_PATH, DT_RUNPATH eller /etc/ld.so.conf + ldconfig-cache
Navngivningskonventionlib<navn>.so[.major[.minor.patch]]; libabc.so er typisk et udviklings-symlink → libabc.so.3 → libabc.so.3.1.2
Indlejret søgestiDT_RPATH eller DT_RUNPATH dynamiske poster indkoder bibliotekssøgestier i filen ved link-tid; DT_RUNPATH foretrækkes, da den kan tilsidesættes af LD_LIBRARY_PATH
Inspektionsværktøjerreadelf -a, objdump -d, nm --dynamic (binutils); ldd til liste over afhængigheder; file-kommando identificerer ELF-type og arkitektur
UdgivetELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Åben standardJa · royaltyfri
Specifikationrefspecs.linuxfoundation.org

SO-konverteringer

Fællesskabets Q&A

spurgt af brugere
Stil et hurtigt spørgsmål
Få hjælp fra folk, der arbejder med SO-filer. Vær specifik - medtag dit system og din softwareversion.
Ingen konto nødvendig · svar normalt inden for en dag

Ingen spørgsmål endnu - vær den første til at spørge om SO-filer.

Ofte stillede spørgsmål

Hvordan løser jeg 'error while loading shared libraries: libXXX.so' på Linux?
Installer den pakke, der leverer biblioteket, med din pakkehåndtering (f.eks. 'sudo apt install libxxx' på Debian/Ubuntu, 'sudo dnf install xxx' på Fedora). Søg med 'apt-file search libxxx.so' eller din distributions pakkesøgning. Download ikke .so-filen fra en hjemmeside.
Hvad er en .so-fil?
Et delt objekt - et dynamisk linket bibliotek med kompileret kode på Linux/Unix, svarende til en Windows .dll. Programmer indlæser det ved kørsel, så de kan dele fælles kode i stedet for at hver applikation inkluderer sin egen kopi.
Er en .so det samme som en Windows DLL?
Funktionelt ja - begge er dynamiske delte biblioteker, der indlæses ved kørsel. Men de kan ikke udskiftes: .so er ELF-kode til Linux/Unix, .dll er PE-kode til Windows. Du kan ikke køre den ene på den andens operativsystem.
Kan jeg åbne eller køre en .so-fil direkte?
Nej - den har intet indgangspunkt og indlæses af andre programmer, den startes ikke for sig selv. For at se indholdet skal du bruge udviklerværktøjer: 'nm -D', 'readelf -d', 'objdump -d' eller dekompilere med Ghidra.
Hvorfor har .so-filer numre som libssl.so.3?
Det er versionsnumre. libssl.so er normalt en symlink-kæde, der peger på en specifik versioneret fil (libssl.so.3 -> libssl.so.3.0.2). Det indlejrede SONAME lader indlæseren vælge en kompatibel version, så gamle programmer fortsat virker, når et bibliotek opdateres.
Kan jeg slette .so-filer for at frigøre plads?
Ikke dem i systemets biblioteksmapper - programmer og operativsystemet afhænger af dem, og fjernelse af dem forårsager netop «cannot open shared object file»-fejl. Fjern kun biblioteker ved at afinstallere deres pakke via pakkehåndteringen.

Referencer

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

Udforsk mere

på tværs af databasen

Populære filtyper i denne uge

1.AQQAQQ Instant Messenger File
2.MDMarkdown Document
3.CRDOWNLOADChrome Partial Download File
4.BINCD/DVD Disc Image (BIN/CUE)
5.PARTPartial Download File
6.NOMEDIAAndroid No-Media Marker File
7.RPMSGRestricted Permission Message
8.EXEWindows Executable (Portable Executable)
9.AVIFAV1 Image File Format (AVIF)
10.SB3Scratch 3.0 Project File

Relaterede filtyper

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

Gratis filværktøjer

En fil-identifikator og billedkonverter direkte i browseren - alt kører på din enhed.

Åbn værktøjskassen

Gennemse filtyper A-Å