.SO

SO-bestand

Shared Object (ELF shared library)
Stel een vraag
SNEL ANTWOORD

Een .so-bestand is een gedeelde bibliotheek (shared object library) op Linux en Unix - het Linux-equivalent van een Windows .dll. Programma's laden dit automatisch tijdens het uitvoeren; u opent het nooit rechtstreeks. Als een app faalt met een foutmelding „cannot open shared object file”, installeer dan de ontbrekende bibliotheek via de pakketbeheerder van uw distributie (apt, dnf, pacman) in plaats van het bestand van een website te downloaden.

Ontwikkelaar: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Categorie: Systeembestanden Open standaard MIME: application/x-sharedlib
OPENT OP macOS Linux
Gerelateerd: .NOMEDIA · .DLL · .TMP · .LNK

Op deze pagina

19k+ extensies geïndexeerd
Laatst beoordeeld op Jun 17, 2026

Niet zeker wat uw bestand is?

Sleep een bestand naar onze identificatietool - we lezen alleen de eerste bytes om het formaat te benoemen.

Identificeer een bestand

Wat is het SO-bestandsformaat?

Een .so-bestand bevat een dynamisch geladen gedeelde bibliotheek voor Unix- en Linux-applicaties. .so is een binair bestand dat wordt gebruikt om toegang te bieden tot gedeelde code en gegevens die door een of meer programma's kunnen worden gebruikt wanneer ze worden gestart. De extensie staat voor Shared Object, wat verwijst naar het feit dat zodra de bibliotheek in het geheugen is geladen, de objecten ervan - functies en gegevens - gelijktijdig door meerdere processen kunnen worden benaderd. Het geregistreerde MIME-type voor .so-bestanden is application/x-sharedlib.

.so-bibliotheken zijn ELF-objecten (kort voor Executable and Linkable Format), het standaard binaire formaat dat wordt gebruikt op Linux en veel Unix-achtige systemen voor uitvoerbare bestanden, gecompileerde objecten, gedeelde bibliotheken en core-dumps. Elk geldig ELF-bestand - inclusief .so-bestanden - begint met het magische getal van vier bytes \x7FELF op positie 0. De bestandsstructuur bestaat uit:

  • ELF-header - definieert architectuur, endianness en bitness (32-bit of 64-bit), plus het aantal vermeldingen in de segment- en sectietabellen,
  • Programma-headertabel - beschrijft geheugensegmenten die tijdens het laden worden gebruikt,
  • Sectie-headertabel - beschrijft individuele secties die worden gebruikt door de linker en debugger,
  • Gegevens waarnaar door deze headers wordt verwezen.

Segmenten worden gebruikt tijdens de uitvoering van het programma en kunnen uit meerdere secties bestaan; secties worden gebruikt tijdens de koppelingsbewerking (linking). .so-bestanden kunnen tijdens het compileren aan een programma worden gekoppeld of tijdens runtime worden geladen via dlopen().

.so-bestandsnamen volgen een naamgevingsconventie waarbij de naam van de bibliotheek wordt voorafgegaan door een lib-prefix - een bibliotheek met de naam abc krijgt bijvoorbeeld de bestandsnaam libabc.so, en de vlag -labc wordt gebruikt bij het koppelen. Het .so-achtervoegsel kan worden gevolgd door een versienummer, zoals libabc.so.3 voor het hoofdversiebestand of libabc.so.3.1.2 voor een volledig geversioneerde build. In de praktijk is libabc.so vaak slechts een symbolische koppeling die naar het echte geversioneerde bestand verwijst, en libabc.so.3 kan zelf weer een symlink zijn naar de meest recente compatibele release. De versie die is opgeslagen in de dynamische vermelding DT_SONAME is wat de runtime-linker ld.so registreert en controleert. Sommige low-level systeembibliotheken - zoals ld.so zelf - volgen de lib-prefixconventie niet.

Op Windows is het equivalente concept een .DLL-bestand; op macOS is het een .dylib-bestand. Statische alternatieven op Linux worden gearchiveerd in .a-bestanden.

Beveiliging & veiligheid

RISICO: MEDIUM

Een .so is uitvoerbare native code die draait binnen het proces dat hem laadt, dus een kwaadaardige gedeelde bibliotheek kan alles doen wat het gastprogramma kan. De reële risico's: (1) library hijacking - een malafide .so geplaatst op een plek waar de lader eerst zoekt, of misbruik van LD_PRELOAD/LD_LIBRARY_PATH, kan code injecteren in een legitiem programma; (2) het downloaden van individuele .so-bestanden van willekeurige websites om een fout te herstellen - deze kunnen kwaadaardig of ABI-incompatibel zijn en kunnen het systeem beschadigen of compromitteren. Installeer bibliotheken altijd vanuit de ondertekende pakketbronnen van uw distributie. Het verwijderen van systeem-.so-bestanden (in /lib, /usr/lib) kan het besturingssysteem of apps onbruikbaar maken.

Formaatdetails

in een notendop
VOLLEDIGE NAAMShared Object (ELF shared library)
ONTWIKKELAARUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)sinds ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
MIME-TYPEapplication/x-sharedlib
TYPEELF (Executable and Linkable Format) gedeelde bibliotheek - gecompileerde native machinecode
STANDAARDOpen · royaltyvrij
MAGIC BYTES · BESTANDSSIGNATUUR
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
De eerste vier bytes zijn 0x7F gevolgd door „ELF”. Byte 4 (EI_CLASS) is 1 voor 32-bit / 2 for 64-bit; byte 5 (EI_DATA) is de endianness; het e_type veld (offset 16) is ET_DYN (0x0003) voor een gedeeld object. Dezelfde ELF-header wordt gebruikt door Linux-executables en objectbestanden, dus de .so-aanduiding komt voort uit e_type + bestandsrol, niet uit een apart magisch getal.

Programma's die SO-bestanden openen

macOS1 app
binutils / file / Ghidra Open-source macOS gebruikt standaard .dylib, maar Linux .so-bestanden kunnen worden geïnspecteerd met cross-binutils of Ghidra. 'file lib.so' bevestigt dat het een ELF shared object is.
Linux4 apps
System dynamic linker (ld.so) + package manager Ingebouwd U 'opent' een .so niet - de lader gebruikt deze automatisch. Om een ontbrekende te herstellen, installeert u het pakket dat deze levert: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Gebruik 'ldconfig' om de cache te verversen.
binutils (nm / objdump / readelf) Open-source Inspecteer een .so via de opdrachtregel: 'nm -D lib.so' toont symbolen, 'readelf -d lib.so' toont de SONAME/afhankelijkheden, 'objdump -d lib.so' deassembleert.
ldd Ingebouwd 'ldd ./programma' of 'ldd lib.so' geeft aan welke shared objects nodig zijn en of ze gevonden worden - de eerste stap bij een 'missing .so' fout.
Ghidra Open-source Importeer de .so voor volledige deassemblage/decompilatie bij het reverse-engineeren van native code (werkt ook op Windows/macOS).

Technische details

diepe specificaties
MIME-typeapplication/x-sharedlib
Magic bytes7F 45 4C 46 ("\x7FELF") op bestandsoffset 0 - identieke magic voor alle ELF-bestanden; het e_type veld onderscheidt gedeelde objecten
ELF e_type waardeET_DYN (0x0003) - onderscheidt een gedeeld object van een uitvoerbaar bestand (ET_EXEC = 0x0002) of verplaatsbaar object (ET_REL = 0x0001)
BitnessEI_CLASS byte op offset 4: 1 = 32-bit (Elf32), 2 = 64-bit (Elf64); beide varianten worden veelvuldig gebruikt op Linux
EndiannessEI_DATA byte op offset 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); architectuurafhankelijk
Positie-onafhankelijke codeMoet worden gecompileerd met -fPIC zodat de bibliotheek naar elk virtueel adres kan worden gemapt zonder relocatieconflicten tussen processen
Dynamische symbooltabel.dynsym sectie exporteert en importeert symbolen die zichtbaar zijn tijdens runtime; .dynstr bevat de bijbehorende naamreeksen
PLT / GOTProcedure Linkage Table en Global Offset Table maken lazy (standaard) of eager (-z now) symboolresolutie mogelijk tijdens het laden
soname (DT_SONAME)Canonieke bibliotheeknaam ingebed in de dynamische ELF-sectie; ld.so registreert deze naam wanneer een programma wordt gekoppeld, wat ABI-versietracking onafhankelijk van de bestandsnaam mogelijk maakt
Symboolversiebeheer.gnu.version en .gnu.version_r secties maken meerdere symboolversies binnen één bestand mogelijk, wat achterwaarts compatibele ABI-evolutie toestaat
Runtime-linkerGeladen door ld.so / ld-linux-x86-64.so.2; zoekpad beheerd door LD_LIBRARY_PATH, DT_RUNPATH, of /etc/ld.so.conf + ldconfig cache
Naamgevingsconventielib<naam>.so[.major[.minor.patch]]; libabc.so is doorgaans een ontwikkelings-symlink → libabc.so.3 → libabc.so.3.1.2
Ingebed zoekpadDT_RPATH of DT_RUNPATH dynamische vermeldingen bakken bibliotheekzoekpaden in het bestand tijdens het koppelen; DT_RUNPATH heeft de voorkeur omdat het kan worden overschreven door LD_LIBRARY_PATH
Inspectietoolsreadelf -a, objdump -d, nm --dynamic (binutils); ldd voor het weergeven van afhankelijkheden; file-commando identificeert ELF-type en architectuur
UitgebrachtELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Open standaardJa · royaltyvrij
Specificatierefspecs.linuxfoundation.org

SO conversies

Community V&A

gevraagd door gebruikers
Stel een korte vraag
Krijg hulp van mensen die met SO-bestanden werken. Wees specifiek - vermeld uw systeem en softwareversie.
Geen account nodig · antwoorden meestal binnen een dag

Nog geen vragen - wees de eerste om iets te vragen over SO-bestanden.

Veelgestelde vragen

Hoe herstel ik 'error while loading shared libraries: libXXX.so' op Linux?
Installeer het pakket dat de bibliotheek levert met uw pakketbeheerder (bijv. 'sudo apt install libxxx' op Debian/Ubuntu, 'sudo dnf install xxx' on Fedora). Zoek met 'apt-file search libxxx.so' of de pakketzoeker van uw distributie. Download de .so niet van een website.
Wat is een .so-bestand?
Een shared object - een dynamisch gekoppelde bibliotheek van gecompileerde code op Linux/Unix, het equivalent van een Windows .dll. Programma's laden dit tijdens runtime zodat ze gemeenschappelijke code kunnen delen in plaats van dat elk programma een eigen kopie bevat.
Is een .so hetzelfde als een Windows DLL?
Functioneel gezien wel - beide zijn dynamische gedeelde bibliotheken die tijdens runtime worden geladen. Maar ze zijn niet uitwisselbaar: .so is ELF-code voor Linux/Unix, .dll is PE-code voor Windows. U kunt de een niet op het besturingssysteem van de ander draaien.
Kan ik een .so-bestand rechtstreeks openen of uitvoeren?
Nee - het heeft geen startpunt (entry point) en wordt geladen door andere programma's, niet zelfstandig gestart. Om de inhoud te bekijken, gebruikt u ontwikkelaarstools: 'nm -D', 'readelf -d', 'objdump -d', of decompileer met Ghidra.
Waarom hebben .so-bestanden nummers zoals libssl.so.3?
Dat zijn versienummers. libssl.so is meestal een keten van symlinks die naar een specifiek geversioneerd bestand wijst (libssl.so.3 -> libssl.so.3.0.2). De ingebedde SONAME stelt de lader in staat een compatibele versie te kiezen, zodat oude programma's blijven werken wanneer een bibliotheek wordt bijgewerkt.
Kan ik .so-bestanden verwijderen om ruimte vrij te maken?
Niet de bestanden in systeembibliotheekmappen - programma's en het besturingssysteem zijn ervan afhankelijk, en het verwijderen ervan veroorzaakt de foutmeldingen „cannot open shared object file”. Verwijder bibliotheken alleen door hun pakket te deïnstalleren via de pakketbeheerder.

Referenties

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

Blijf ontdekken

door de database

Populaire extensies deze week

1.AQQAQQ Instant Messenger File
2.CRDOWNLOADChrome Partial Download File
3.DATProgram Data File (generic)
4.EXEWindows Executable (Portable Executable)
5.RPMSGRestricted Permission Message
6.JPGJPEG Image
7.PARTPartial Download File
8.ICSiCalendar data file
9.BINCD/DVD Disc Image (BIN/CUE)
10.JSONJavaScript Object Notation file

Gerelateerde extensies

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

Gratis bestandstools

Een bestandsidentificatie en afbeeldingsconverter in de browser - alles draait op uw eigen apparaat.

Open de gereedschapskist

Blader door bestandsextensies A-Z