.SO

SO Datei

Shared Object (ELF shared library)
Frage stellen
SCHNELLE ANTWORT

Eine .so-Datei ist eine Shared-Object-Bibliothek unter Linux und Unix - das Linux-Äquivalent einer Windows-.dll-Datei. Programme laden sie automatisch zur Laufzeit; du öffnest sie nie direkt. Wenn eine App mit dem Fehler „cannot open shared object file“ abbricht, installiere die fehlende Bibliothek über den Paketmanager deiner Distribution (apt, dnf, pacman) statt die Datei von einer Website herunterzuladen.

Entwickler: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Kategorie: Betriebssystemdateien Offener Standard MIME: application/x-sharedlib
VERFÜGBAR AUF macOS Linux
Verwandt: .NOMEDIA · .DLL · .TMP · .LNK

Auf dieser Seite

19k+ Erweiterungen indexiert
Zuletzt geprüft Jun 17, 2026

Nicht sicher, was Ihre Datei ist?

Legen Sie eine beliebige Datei in unseren Identifikator - wir lesen nur die ersten Bytes, um das Format zu benennen.

Datei identifizieren

Was ist das SO-Dateiformat?

Eine .so-Datei enthält eine dynamisch geladene Shared Library für Unix- und Linux-Anwendungen. .so ist eine Binärdatei, die gemeinsam genutzten Code und Daten bereitstellt, die ein oder mehrere Programme beim Start verwenden können. Die Erweiterung steht für Shared Object und spiegelt die Tatsache wider, dass die Objekte der Bibliothek - Funktionen und Daten - nach dem Laden in den Speicher von mehreren Prozessen gleichzeitig genutzt werden können. Der registrierte MIME-Typ für .so-Dateien ist application/x-sharedlib.

.so-Bibliotheken sind ELF-Objekte (kurz für Executable and Linkable Format), das Standard-Binärformat, das unter Linux und vielen Unix-ähnlichen Systemen für ausführbare Dateien, kompilierte Objekte, gemeinsam genutzte Bibliotheken und Core-Dumps verwendet wird. Jede gültige ELF-Datei - einschließlich .so-Dateien - beginnt mit der 4-Byte-Magic Number \x7FELF bei Offset 0. Die Dateistruktur umfasst:

  • ELF-Header - definiert Architektur, Byte-Reihenfolge und Bitbreite (32-Bit oder 64-Bit) sowie die Anzahl der Einträge in den Segment- und Sektionstabellen,
  • Programm-Header-Tabelle - beschreibt Speichersegmente, die zur Ladezeit verwendet werden,
  • Sektions-Header-Tabelle - beschreibt einzelne Sektionen, die vom Linker und Debugger verwendet werden,
  • Daten, auf die diese Header verweisen.

Segmente werden während der Programmausführung verwendet und können aus mehreren Sektionen bestehen; Sektionen werden beim Linking-Vorgang verwendet. .so-Dateien können zur Kompilierzeit mit einem Programm verknüpft oder zur Laufzeit über dlopen() geladen werden.

.so-Dateinamen folgen einer Namenskonvention, bei der dem Bibliotheksnamen ein lib-Präfix vorangestellt wird - eine Bibliothek namens abc hat beispielsweise den Dateinamen libabc.so, und beim Linken dagegen wird das Flag -labc verwendet. Das .so-Suffix kann von einer Versionsnummer gefolgt werden, z. B. libabc.so.3 für die Hauptversions-Datei oder libabc.so.3.1.2 für ein vollständig versioniertes Build. In der Praxis ist libabc.so oft nur ein symbolischer Link, der auf die eigentliche versionierte Datei zeigt, und libabc.so.3 kann selbst ein Symlink auf die neueste kompatible Version sein. Die im dynamischen Eintrag DT_SONAME gespeicherte Version ist das, was der Laufzeit-Linker ld.so aufzeichnet und prüft. Einige Low-Level-Systembibliotheken - wie ld.so selbst - folgen nicht der lib-Präfix-Konvention.

Unter Windows ist das Äquivalent eine .DLL-Datei; unter macOS ist es eine .dylib-Datei. Statische Alternativen unter Linux werden in .a-Dateien archiviert.

Sicherheit

RISIKO: MEDIUM

Eine .so ist ausführbarer nativer Code, der im Prozess läuft, der sie lädt - eine bösartige Shared Library kann also alles tun, was das Host-Programm kann. Die realen Risiken: (1) Library-Hijacking - eine bösartige .so, die dort platziert wird, wo der Loader zuerst sucht, oder der Missbrauch von LD_PRELOAD/LD_LIBRARY_PATH, kann Code in ein legitimes Programm einschleusen; (2) das Herunterladen einzelner .so-Dateien von beliebigen Websites zur Behebung eines Fehlers - diese können bösartig oder ABI-inkompatibel sein und das System beschädigen oder kompromittieren. Installiere Bibliotheken immer aus den signierten Paket-Repositories deiner Distribution. Das Löschen von System-.so-Dateien (in /lib, /usr/lib) kann das Betriebssystem oder Anwendungen nicht mehr startfähig machen.

Formatdetails

kurz gefasst
VOLLSTÄNDIGER NAMEShared Object (ELF shared library)
ENTWICKLERUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)seit ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
MIME TYPEapplication/x-sharedlib
TYPELF (Executable and Linkable Format) Shared Library - kompilierter nativer Maschinencode
STANDARDOffen · lizenzfrei
MAGIC BYTES · DATEISIGNATUR
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
Die ersten vier Bytes sind 0x7F gefolgt von „ELF“. Byte 4 (EI_CLASS) ist 1 für 32-Bit / 2 für 64-Bit; Byte 5 (EI_DATA) ist die Byte-Reihenfolge; das e_type-Feld (Offset 16) ist ET_DYN (0x0003) für ein Shared Object. Derselbe ELF-Header wird für ausführbare Linux-Dateien und Objektdateien verwendet, sodass die .so-Bezeichnung aus e_type + Datei-Rolle kommt, nicht aus einer separaten Magic Number.

Programme zum Öffnen von SO-Dateien

macOS1 app
binutils / file / Ghidra Open Source macOS verwendet nativ .dylib-Dateien, aber Linux-.so-Dateien können mit Cross-Binutils oder Ghidra inspiziert werden. 'file lib.so' bestätigt, dass es sich um ein ELF-Shared-Object handelt.
Linux4 apps
System dynamic linker (ld.so) + package manager Integriert Du „öffnest“ eine .so nicht - der Loader verwendet sie automatisch. Um eine fehlende zu beheben, installiere das Paket, das sie bereitstellt: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Verwende 'ldconfig', um den Cache zu aktualisieren.
binutils (nm / objdump / readelf) Open Source Eine .so über die Befehlszeile inspizieren: 'nm -D lib.so' listet Symbole auf, 'readelf -d lib.so' zeigt SONAME/Abhängigkeiten, 'objdump -d lib.so' disassembliert.
ldd Integriert 'ldd ./program' oder 'ldd lib.so' listet benötigte Shared Objects und ob jedes aufgelöst wird - das Erste, was man bei einem „fehlenden .so“-Fehler ausführen sollte.
Ghidra Open Source Die .so für vollständige Disassemblierung/Dekompilierung beim Reverse-Engineering von nativem Code importieren (läuft auch unter Windows/macOS).

Technische Details

technische Spezifikation
MIME-Typapplication/x-sharedlib
Magic Bytes7F 45 4C 46 („\x7FELF“) bei Dateioffset 0 - identische Magic wie alle ELF-Dateien; das e_type-Feld unterscheidet Shared Objects
ELF e_type-WertET_DYN (0x0003) - unterscheidet ein Shared Object von einer ausführbaren Datei (ET_EXEC = 0x0002) oder einem verlagerbaren Objekt (ET_REL = 0x0001)
BitbreiteEI_CLASS-Byte bei Offset 4: 1 = 32-Bit (Elf32), 2 = 64-Bit (Elf64); beide Varianten sind unter Linux weit verbreitet
Byte-ReihenfolgeEI_DATA-Byte bei Offset 5: 1 = Little-Endian (ELFDATA2LSB), 2 = Big-Endian (ELFDATA2MSB); architekturspezifisch
Positions-unabhängiger CodeMuss mit -fPIC kompiliert werden, damit die Bibliothek an eine beliebige virtuelle Adresse gemappt werden kann, ohne Relokationskonflikte zwischen Prozessen
Dynamische Symboltabelle.dynsym-Sektion exportiert und importiert zur Laufzeit sichtbare Symbole; .dynstr enthält die entsprechenden Namenszeichenketten
PLT / GOTProcedure Linkage Table und Global Offset Table ermöglichen verzögerte (Standard) oder sofortige (-z now) Symbolauflösung zur Ladezeit
Soname (DT_SONAME)Kanonischer Bibliotheksname, eingebettet in den dynamischen ELF-Abschnitt; ld.so zeichnet diesen Namen beim Linken eines Programms auf und ermöglicht so ABI-Versionsverfolgung unabhängig vom Dateinamen
Symbol-Versionierung.gnu.version- und .gnu.version_r-Sektionen ermöglichen mehrere Symbolversionen innerhalb einer Datei und unterstützen rückwärtskompatible ABI-Entwicklung
Laufzeit-LinkerGeladen durch ld.so / ld-linux-x86-64.so.2; Suchpfad gesteuert durch LD_LIBRARY_PATH, DT_RUNPATH oder /etc/ld.so.conf + ldconfig-Cache
Namenskonventionlib<name>.so[.major[.minor.patch]]; libabc.so ist typischerweise ein Entwicklungs-Symlink → libabc.so.3 → libabc.so.3.1.2
Eingebetteter SuchpfadDT_RPATH- oder DT_RUNPATH-dynamische Einträge baken Bibliothekssuchpfade zur Link-Zeit in die Datei ein; DT_RUNPATH wird bevorzugt, da es durch LD_LIBRARY_PATH überschrieben werden kann
Inspektionswerkzeugereadelf -a, objdump -d, nm --dynamic (binutils); ldd zur Abhängigkeitsliste; file-Befehl identifiziert ELF-Typ und Architektur
VeröffentlichtELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Offener StandardJa · lizenzgebührenfrei
Spezifikationrefspecs.linuxfoundation.org

SO-Konvertierungen

Community Q&A

von Nutzern gefragt
Schnelle Frage stellen
Holen Sie sich Hilfe von Menschen, die mit SO-Dateien arbeiten. Seien Sie konkret - geben Sie Ihr System und die Softwareversion an.
Kein Konto erforderlich · Antworten meist innerhalb eines Tages

Noch keine Fragen - stellen Sie die erste Frage zu SO-Dateien.

Häufig gestellte Fragen

Wie behebe ich 'error while loading shared libraries: libXXX.so' unter Linux?
Installiere das Paket, das die Bibliothek bereitstellt, mit deinem Paketmanager (z. B. 'sudo apt install libxxx' unter Debian/Ubuntu, 'sudo dnf install xxx' unter Fedora). Suche mit 'apt-file search libxxx.so' oder der Paketsuche deiner Distribution. Lade die .so nicht von einer Website herunter.
Was ist eine .so-Datei?
Ein Shared Object - eine dynamisch gelinkte Bibliothek mit kompiliertem Code unter Linux/Unix, das Äquivalent einer Windows-.dll-Datei. Programme laden sie zur Laufzeit, damit sie gemeinsamen Code nutzen können, statt jeder eine eigene Kopie zu bündeln.
Ist eine .so dasselbe wie eine Windows-DLL?
Funktional ja - beide sind dynamisch gemeinsam genutzte Bibliotheken, die zur Laufzeit geladen werden. Aber sie sind nicht austauschbar: .so ist ELF-Code für Linux/Unix, .dll ist PE-Code für Windows. Man kann eine nicht auf dem Betriebssystem der anderen verwenden.
Kann ich eine .so-Datei direkt öffnen oder ausführen?
Nein - sie hat keinen Einstiegspunkt und wird von anderen Programmen geladen, nicht eigenständig gestartet. Um hineinzuschauen, verwende Entwicklertools: 'nm -D', 'readelf -d', 'objdump -d' oder dekompiliere mit Ghidra.
Warum haben .so-Dateien Nummern wie libssl.so.3?
Das sind Versionsnummern. libssl.so ist in der Regel eine Symlink-Kette, die auf eine bestimmte versionierte Datei zeigt (libssl.so.3 -> libssl.so.3.0.2). Der eingebettete SONAME lässt den Loader eine kompatible Version wählen, sodass alte Programme weiter funktionieren, wenn eine Bibliothek aktualisiert wird.
Kann ich .so-Dateien löschen, um Speicherplatz freizugeben?
Nicht die in Systembibliotheksverzeichnissen - Programme und das Betriebssystem sind von ihnen abhängig, und das Entfernen verursacht genau die „cannot open shared object file“-Fehler. Bibliotheken nur durch das Deinstallieren ihres Pakets über den Paketmanager entfernen.

Quellen

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

Weiter entdecken

in der Datenbank

Top-Erweiterungen dieser Woche

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

Verwandte Erweiterungen

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

Kostenlose Datei-Tools

Ein Browser-Dateiidentifikator und Bildkonverter - alles läuft auf Ihrem Gerät.

Toolbox öffnen

Dateierweiterungen A-Z durchsuchen