.SO

SO-fil

Shared Object (ELF shared library)
Ställ en fråga
SNABBT SVAR

En .so-fil är ett delat objektbibliotek på Linux och Unix - Linux-motsvarigheten till en Windows .dll. Program laddar den automatiskt vid körning; du öppnar den aldrig direkt. Om en app misslyckas med felet «cannot open shared object file», installera det saknade biblioteket via din distributions pakethanterare (apt, dnf, pacman) snarare än att ladda ner filen från en webbplats.

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

På denna sida

19k+ filtillägg indexerade
Senast granskad Jun 17, 2026

Osäker på vad din fil är?

Släpp valfri fil i vår identifierare - vi läser bara de första byten för att namnge formatet.

Identifiera en fil

Vad är filformatet SO?

En .so-fil innehåller ett dynamiskt laddat delat bibliotek för Unix- och Linux-applikationer. .so är en binär fil som används för att ge åtkomst till delad kod och data som ett eller flera program kan använda när de startas. Tillägget står för Shared Object, vilket speglar det faktum att när biblioteket väl har laddats in i minnet kan dess objekt - funktioner och data - nås av flera processer samtidigt. MIME-typen som registrerats för .so-filer är application/x-sharedlib.

.so-bibliotek är ELF-objekt (förkortning för Executable and Linkable Format), det standardiserade binärformatet som används i Linux och många Unix-liknande system för körbara filer, kompilerade objekt, delade bibliotek och core-dumpar. Varje giltig ELF-fil - inklusive .so-filer - börjar med det fyra byte långa magiska numret \x7FELF vid offset 0. Filstrukturen består av:

  • ELF-header - definierar arkitektur, endianness och bitness (32-bitars eller 64-bitars), plus antalet poster i segment- och sektionstabellerna,
  • Program-headertabell - beskriver minnessegment som används vid laddning,
  • Sektions-headertabell - beskriver enskilda sektioner som används av länkaren och debuggern,
  • Data som refereras av dessa headers.

Segment används under programkörning och kan bestå av flera sektioner; sektioner används under länkningsoperationen. .so-filer kan länkas in i ett program vid kompilering eller laddas vid körning via dlopen().

Filnamn för .so följer en namnkonvention där biblioteksnamnet föregås av prefixet lib - till exempel kommer ett bibliotek med namnet abc att ha filnamnet libabc.so, och flaggan -labc används vid länkning mot det. Suffixet .so kan följas av ett versionsnummer, såsom libabc.so.3 för huvudversionsfilen eller libabc.so.3.1.2 för en fullständigt versionerad build. I praktiken är libabc.so ofta bara en symbolisk länk som pekar på den verkliga versionerade filen, och libabc.so.3 kan i sig vara en symlänk till den senaste kompatibla utgåvan. Versionen som lagras i den dynamiska posten DT_SONAME är vad körtidslänkaren ld.so registrerar och kontrollerar. Vissa systembibliotek på låg nivå - som ld.so självt - följer inte lib-prefixkonventionen.

På Windows är motsvarande koncept en .DLL-fil; på macOS är det en .dylib-fil. Statiska alternativ på Linux arkiveras i .a-filer.

Säkerhet & trygghet

RISK: MEDIUM

En .so är körbar nativ kod som körs inuti den process som laddar den, så ett skadligt delat bibliotek kan göra allt som värdprogrammet kan. De verkliga riskerna: (1) bibliotekskapning (hijacking) - en falsk .so placerad där laddaren söker först, eller missbruk av LD_PRELOAD/LD_LIBRARY_PATH, kan injicera kod i ett legitimt program; (2) nedladdning av enskilda .so-filer från slumpmässiga webbplatser för att fixa ett fel - dessa kan vara skadliga eller ABI-inkompatibla och kan förstöra eller kompromettera systemet. Installera alltid bibliotek från din distributions signerade paketförråd. Att radera systemets .so-filer (i /lib, /usr/lib) kan göra att operativsystemet eller appar inte går att starta.

Formatdetaljer

i ett nötskal
FULLSTÄNDIGT NAMNShared Object (ELF shared library)
UTVECKLAREUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)sedan ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
KATEGORISystemfiler
MIME-TYPapplication/x-sharedlib
TYPELF (Executable and Linkable Format) delat bibliotek - kompilerad nativ maskinkod
STANDARDÖppen · royaltyfri
MAGIC BYTES · FILSIGNATUR
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
De första fyra byten är 0x7F följt av «ELF». Byte 4 (EI_CLASS) är 1 för 32-bitars / 2 for 64-bitars; byte 5 (EI_DATA) är endianness; fältet e_type (offset 16) är ET_DYN (0x0003) för ett delat objekt. Samma ELF-header används av körbara filer och objektfiler i Linux, så .so-beteckningen kommer från e_type + filens roll, inte ett separat magiskt nummer.

Program som öppnar SO-filer

macOS1 app
binutils / file / Ghidra Öppen källkod macOS använder .dylib nativt, men Linux .so-filer kan inspekteras med cross-binutils eller Ghidra. 'file lib.so' bekräftar att det är ett ELF delat objekt.
Linux4 apps
System dynamic linker (ld.so) + package manager Inbyggd Du «öppnar» inte en .so - laddaren använder den automatiskt. För att fixa en som saknas, installera paketet som tillhandahåller den: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Använd 'ldconfig' för att uppdatera cachen.
binutils (nm / objdump / readelf) Öppen källkod Inspektera en .so på kommandoraden: 'nm -D lib.so' listar symboler, 'readelf -d lib.so' visar SONAME/beroenden, 'objdump -d lib.so' disassemblerar.
ldd Inbyggd 'ldd ./program' eller 'ldd lib.so' listar vilka delade objekt som behövs och om varje länk kan lösas - det första man bör köra vid fel om «saknad .so».
Ghidra Öppen källkod Importera .so-filen för fullständig disassemblering/dekompilering vid reverse-engineering av maskinkod (körs även på Windows/macOS).

Tekniska detaljer

djup specifikation
MIME-typapplication/x-sharedlib
Magiska byte7F 45 4C 46 ("\x7FELF") vid fil-offset 0 - identisk magi för alla ELF-filer; fältet e_type skiljer delade objekt åt
ELF e_type-värdeET_DYN (0x0003) - skiljer ett delat objekt från en körbar fil (ET_EXEC = 0x0002) eller ett relokerbart objekt (ET_REL = 0x0001)
BitnessEI_CLASS-byte vid offset 4: 1 = 32-bitars (Elf32), 2 = 64-bitars (Elf64); båda varianterna används i stor utsträckning på Linux
EndiannessEI_DATA-byte vid offset 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); arkitekturspecifikt
Positionsoberoende kodMåste kompileras med -fPIC så att biblioteket kan mappas till valfri virtuell adress utan relokeringskonflikter mellan processer
Dynamisk symboltabell.dynsym-sektionen exporterar och importerar symboler som är synliga vid körning; .dynstr innehåller motsvarande namnsträngar
PLT / GOTProcedure Linkage Table och Global Offset Table möjliggör lat (standard) eller ivrig (-z now) symbolupplösning vid laddning
soname (DT_SONAME)Kanoniskt biblioteksnamn inbäddat i den dynamiska ELF-sektionen; ld.so registrerar detta namn när ett program länkas, vilket möjliggör spårning av ABI-version oberoende av filnamn
SymbolversioneringSektionerna .gnu.version och .gnu.version_r tillåter flera symbolversioner inom en fil, vilket möjliggör bakåtkompatibel ABI-evolution
KörtidslänkareLaddas av ld.so / ld-linux-x86-64.so.2; sökvägen styrs av LD_LIBRARY_PATH, DT_RUNPATH, eller /etc/ld.so.conf + ldconfig-cache
Namnkonventionlib<namn>.so[.major[.minor.patch]]; libabc.so är vanligtvis en utvecklings-symlänk → libabc.so.3 → libabc.so.3.1.2
Inbäddad sökvägDynamiska poster för DT_RPATH eller DT_RUNPATH bakar in sökvägar för bibliotekssökning i filen vid länkning; DT_RUNPATH föredras eftersom den kan åsidosättas av LD_LIBRARY_PATH
Inspektionsverktygreadelf -a, objdump -d, nm --dynamic (binutils); ldd för beroendelista; kommandot 'file' identifierar ELF-typ och arkitektur
SläpptELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Öppen standardJa · royaltyfri
Specifikationrefspecs.linuxfoundation.org

SO-konverteringar

Frågor & svar

frågat av användare
Ställ en snabb fråga
Få hjälp från personer som arbetar med SO-filer. Var specifik - inkludera ditt system och programversion.
Inget konto behövs · svar vanligtvis inom en dag

Inga frågor än - bli den första att fråga om SO-filer.

Vanliga frågor

Hur fixar jag 'error while loading shared libraries: libXXX.so' på Linux?
Installera paketet som tillhandahåller biblioteket med din pakethanterare (t.ex. 'sudo apt install libxxx' på Debian/Ubuntu, 'sudo dnf install xxx' on Fedora). Sök med 'apt-file search libxxx.so' eller din distributions paketsökning. Ladda inte ner .so-filen från en webbplats.
Vad är en .so-fil?
Ett delat objekt - ett dynamiskt länkat bibliotek med kompilerad kod på Linux/Unix, motsvarigheten till en Windows .dll. Program laddar det vid körning så att de kan dela gemensam kod istället för att varje program inkluderar en egen kopia.
Är en .so samma sak som en Windows DLL?
Funktionellt ja - båda är dynamiska delade bibliotek som laddas vid körning. Men de är inte utbytbara: .so är ELF-kod för Linux/Unix, .dll är PE-kod för Windows. Du kan inte köra den ena på den andras operativsystem.
Kan jag öppna eller köra en .so-fil direkt?
Nej - den har ingen startpunkt (entry point) och laddas av andra program, den startas inte på egen hand. För att titta inuti den, använd utvecklarverktyg: 'nm -D', 'readelf -d', 'objdump -d', eller dekompilera med Ghidra.
Varför har .so-filer nummer som libssl.so.3?
Det är versionsnummer. libssl.so är vanligtvis en symlänkskedja som pekar på en specifik versionerad fil (libssl.so.3 -> libssl.so.3.0.2). Det inbäddade SONAME gör att laddaren kan välja en kompatibel version, så att gamla program fortsätter att fungera när ett bibliotek uppdateras.
Kan jag ta bort .so-filer för att frigöra utrymme?
Inte de som finns i systemets bibliotekskataloger - program och operativsystemet är beroende av dem, och att ta bort dem orsakar felmeddelanden om att delade objektfiler inte kan öppnas. Ta endast bort bibliotek genom att avinstallera deras paket via pakethanteraren.

Referenser

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

Fortsätt utforska

genom databasen

Populära filtillägg denna vecka

1.AQQAQQ Instant Messenger File
2.CRDOWNLOADChrome Partial Download File
3.JPGJPEG Image
4.PARTPartial Download File
5.MDMarkdown Document
6.BINCD/DVD Disc Image (BIN/CUE)
7.EXEWindows Executable (Portable Executable)
8.DATProgram Data File (generic)
9.RPMSGRestricted Permission Message
10.DBSQLite Database File

Relaterade filtillägg

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

Gratis filverktyg

En filidentifierare och bildkonverterare direkt i webbläsaren - allt körs på din enhet.

Öppna verktygslådan

Bläddra bland filtillägg A-Ö