.SO

Plik SO

Shared Object (ELF shared library)
Zadaj pytanie
SZYBKA ODPOWIEDŹ

Plik .so to biblioteka współdzielona (shared object) w systemach Linux i Unix - odpowiednik plików .dll w systemie Windows. Programy ładują go automatycznie podczas uruchamiania; nigdy nie otwiera się go bezpośrednio. Jeśli aplikacja zgłasza błąd „cannot open shared object file”, zainstaluj brakującą bibliotekę za pomocą menedżera pakietów swojej dystrybucji (apt, dnf, pacman), zamiast pobierać plik ze stron internetowych.

Deweloper: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Kategoria: Pliki systemowe Otwarty standard MIME: application/x-sharedlib
OTWIERA SIĘ NA macOS Linux
Powiązane: .NOMEDIA · .DLL · .TMP · .LNK

Na tej stronie

Zindeksowano 19k+ rozszerzeń
Ostatnia weryfikacja Jun 17, 2026

Nie wiesz, co to za plik?

Przeciągnij dowolny plik do naszego identyfikatora - odczytujemy tylko pierwsze bajty, aby nazwać format.

Zidentyfikuj plik

Co to jest format pliku SO?

Plik .so zawiera dynamicznie ładowaną bibliotekę współdzieloną dla aplikacji systemów Unix i Linux. .so to plik binarny używany do zapewnienia dostępu do współdzielonego kodu i danych, z których może korzystać jeden lub więcej programów po uruchomieniu. Rozszerzenie to skrót od Shared Object, co odzwierciedla fakt, że po załadowaniu biblioteki do pamięci jej obiekty - funkcje i dane - mogą być dostępne dla wielu procesów jednocześnie. Typ MIME zarejestrowany dla plików .so to application/x-sharedlib.

Biblioteki .soobiektami ELF (skrót od Executable and Linkable Format), standardowym formatem binarnym używanym w systemie Linux i wielu systemach uniksopodobnych dla plików wykonywalnych, skompilowanych obiektów, bibliotek współdzielonych i zrzutów pamięci (core dumps). Każdy prawidłowy plik ELF - w tym pliki .so - zaczyna się od czterobajtowej magicznej liczby \x7FELF pod offsetem 0. Struktura pliku obejmuje:

  • Nagłówek ELF - definiuje architekturę, kolejność bajtów (endianness) i bitowość (32-bit lub 64-bit), a także liczbę wpisów w tablicach segmentów i sekcji,
  • Tablicę nagłówków programów - opisuje segmenty pamięci używane w czasie ładowania,
  • Tablicę nagłówków sekcji - opisuje poszczególne sekcje używane przez linker i debugger,
  • Dane, do których odwołują się te nagłówki.

Segmenty są używane podczas wykonywania programu i mogą składać się z wielu sekcji; sekcje są używane podczas operacji linkowania. Pliki .so mogą być linkowane do programu w czasie kompilacji lub ładowane w czasie wykonywania za pomocą funkcji dlopen().

Nazwy plików .so są zgodne z konwencją, w której nazwa biblioteki jest poprzedzona prefiksem lib - na przykład biblioteka o nazwie abc będzie miała nazwę pliku libabc.so, a flaga -labc jest używana podczas linkowania z nią. Po przyrostku .so może następować numer wersji, taki jak libabc.so.3 dla pliku wersji głównej lub libabc.so.3.1.2 dla w pełni zwersjonowanej kompilacji. W praktyce libabc.so jest często tylko dowiązaniem symbolicznym wskazującym na rzeczywisty plik z wersją, a libabc.so.3 może być symlinkiem do najnowszego kompatybilnego wydania. Wersja zapisana we wpisie dynamicznym DT_SONAME jest tym, co linker czasu wykonania ld.so rejestruje i sprawdza. Niektóre niskopoziomowe biblioteki systemowe - takie jak samo ld.so - nie przestrzegają konwencji prefiksu lib.

W systemie Windows odpowiednikiem jest plik .DLL; w systemie macOS jest to plik .dylib. Statyczne alternatywy w systemie Linux są archiwizowane w plikach .a.

Bezpieczeństwo

RYZYKO: MEDIUM

Plik .so to wykonywalny kod natywny, który działa wewnątrz procesu, który go ładuje, więc złośliwa biblioteka współdzielona może zrobić wszystko to, co program hosta. Rzeczywiste zagrożenia: (1) przejęcie biblioteki (library hijacking) - podstawiony plik .so umieszczony tam, gdzie ładowarka szuka najpierw, lub nadużycie LD_PRELOAD/LD_LIBRARY_PATH może wstrzyknąć kod do legalnego programu; (2) pobieranie pojedynczych plików .so z przypadkowych stron w celu naprawienia błędu - mogą one być złośliwe lub niekompatybilne z ABI i mogą uszkodzić lub narazić system. Zawsze instaluj biblioteki z podpisanych repozytoriów pakietów swojej dystrybucji. Usuwanie systemowych plików .so (w /lib, /usr/lib) może uniemożliwić uruchomienie systemu operacyjnego lub aplikacji.

Szczegóły formatu

w pigułce
PEŁNA NAZWAShared Object (ELF shared library)
DEWELOPERUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)od ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
TYP MIMEapplication/x-sharedlib
TYPBiblioteka współdzielona ELF (Executable and Linkable Format) - skompilowany natywny kod maszynowy
STANDARDOtwarty · bezpłatny
MAGICZNE BAJTY · SYGNATURA PLIKU
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
Pierwsze cztery bajty to 0x7F, a następnie „ELF”. Bajt 4 (EI_CLASS) to 1 dla 32-bit / 2 dla 64-bit; bajt 5 (EI_DATA) to kolejność bajtów; pole e_type (offset 16) to ET_DYN (0x0003) dla obiektu współdzielonego. Ten sam nagłówek ELF jest używany przez pliki wykonywalne i pliki obiektowe Linuxa, więc oznaczenie .so wynika z e_type + roli pliku, a nie z osobnej liczby magicznej.

Programy otwierające pliki SO

macOS1 app
binutils / file / Ghidra Open-source macOS natywnie używa .dylib, ale pliki .so z Linuxa można badać za pomocą cross-binutils lub Ghidra. Polecenie „file lib.so” potwierdza, że jest to obiekt współdzielony ELF.
Linux4 apps
System dynamic linker (ld.so) + package manager Wbudowany Nie „otwiera” się pliku .so - ładowarka używa go automatycznie. Aby naprawić brakujący plik, zainstaluj pakiet, który go dostarcza: „apt install libfoo” / „dnf install foo” / „pacman -S foo”. Użyj „ldconfig”, aby odświeżyć pamięć podręczną.
binutils (nm / objdump / readelf) Open-source Sprawdź plik .so w wierszu poleceń: „nm -D lib.so” listuje symbole, „readelf -d lib.so” pokazuje SONAME/zależności, „objdump -d lib.so” wykonuje deasemblację.
ldd Wbudowany „ldd ./program” lub „ldd lib.so” listuje obiekty współdzielone, których dany plik potrzebuje i czy każdy z nich jest odnaleziony - to pierwsza rzecz do sprawdzenia przy błędzie „missing .so”.
Ghidra Open-source Zaimportuj plik .so w celu pełnej deasemblacji/dekompilacji podczas inżynierii wstecznej kodu natywnego (działa również w Windows/macOS).

Szczegóły techniczne

specyfikacja
Typ MIMEapplication/x-sharedlib
Magiczne bajty7F 45 4C 46 („\x7FELF”) pod offsetem 0 - identyczne dla wszystkich plików ELF; pole e_type odróżnia obiekty współdzielone
Wartość ELF e_typeET_DYN (0x0003) - odróżnia obiekt współdzielony od pliku wykonywalnego (ET_EXEC = 0x0002) lub obiektu relokowalnego (ET_REL = 0x0001)
BitowośćBajt EI_CLASS pod offsetem 4: 1 = 32-bit (Elf32), 2 = 64-bit (Elf64); oba warianty są powszechnie stosowane w systemie Linux
EndiannessBajt EI_DATA pod offsetem 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); zależne od architektury
Kod niezależny od pozycjiMusi być skompilowany z flagą -fPIC, aby biblioteka mogła zostać zmapowana pod dowolny adres wirtualny bez konfliktów relokacji między procesami
Dynamiczna tablica symboliSekcja .dynsym eksportuje i importuje symbole widoczne w czasie wykonywania; .dynstr przechowuje odpowiadające im ciągi nazw
PLT / GOTProcedure Linkage Table i Global Offset Table umożliwiają leniwe (domyślne) lub natychmiastowe (-z now) rozwiązywanie symboli w czasie ładowania
soname (DT_SONAME)Kanoniczna nazwa biblioteki osadzona w sekcji dynamicznej ELF; ld.so rejestruje tę nazwę podczas linkowania programu, umożliwiając śledzenie wersji ABI niezależnie od nazwy pliku
Wersjonowanie symboliSekcje .gnu.version i .gnu.version_r pozwalają na wiele wersji symboli w jednym pliku, umożliwiając ewolucję ABI kompatybilną wstecz
Linker czasu wykonaniaŁadowany przez ld.so / ld-linux-x86-64.so.2; ścieżka wyszukiwania kontrolowana przez LD_LIBRARY_PATH, DT_RUNPATH lub /etc/ld.so.conf + pamięć podręczną ldconfig
Konwencja nazewnictwalib<nazwa>.so[.główna[.pomocnicza.poprawka]]; libabc.so to zazwyczaj deweloperski symlink → libabc.so.3 → libabc.so.3.1.2
Osadzona ścieżka wyszukiwaniaWpisy dynamiczne DT_RPATH lub DT_RUNPATH „zaszywają” ścieżki wyszukiwania bibliotek w pliku w czasie linkowania; DT_RUNPATH jest preferowany, ponieważ może być nadpisany przez LD_LIBRARY_PATH
Narzędzia inspekcjireadelf -a, objdump -d, nm --dynamic (binutils); ldd do listowania zależności; polecenie file identyfikuje typ ELF i architekturę
WydanoELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Otwarty standardTak · bezpłatny (royalty-free)
Specyfikacjarefspecs.linuxfoundation.org

Konwersje SO

Pytania i odpowiedzi społeczności

pytania użytkowników
Zadaj szybkie pytanie
Uzyskaj pomoc od osób pracujących z plikami SO. Bądź precyzyjny - podaj system i wersję oprogramowania.
Konto nie jest wymagane · odpowiedzi zazwyczaj w ciągu doby

Brak pytań - bądź pierwszą osobą, która zapyta o pliki SO.

Najczęściej zadawane pytania

Jak naprawić błąd „error while loading shared libraries: libXXX.so” w systemie Linux?
Zainstaluj pakiet dostarczający bibliotekę za pomocą menedżera pakietów (np. „sudo apt install libxxx” w Debian/Ubuntu, „sudo dnf install xxx” w Fedora). Wyszukaj pakiet poleceniem „apt-file search libxxx.so” lub wyszukiwarką pakietów swojej dystrybucji. Nie pobieraj plików .so ze stron internetowych.
Co to jest plik .so?
To obiekt współdzielony (shared object) - dynamicznie linkowana biblioteka skompilowanego kodu w systemach Linux/Unix, odpowiednik pliku .dll z Windows. Programy ładują go w czasie wykonywania, aby mogły współdzielić wspólny kod zamiast dołączać jego kopię do każdego pliku.
Czy .so to to samo co Windows DLL?
Funkcjonalnie tak - oba są dynamicznymi bibliotekami współdzielonymi ładowanymi w czasie wykonywania. Nie są jednak wymienne: .so to kod ELF dla Linux/Unix, a .dll to kod PE dla Windows. Nie można uruchomić jednego w systemie operacyjnym drugiego.
Czy mogę bezpośrednio otworzyć lub uruchomić plik .so?
Nie - nie posiada on punktu wejścia i jest ładowany przez inne programy, a nie uruchamiany samodzielnie. Aby zajrzeć do środka, użyj narzędzi programistycznych: „nm -D”, „readelf -d”, „objdump -d” lub zdekompiluj za pomocą Ghidra.
Dlaczego pliki .so mają numery takie jak libssl.so.3?
Są to numery wersji. libssl.so to zazwyczaj łańcuch symlinków wskazujący na konkretny plik wersji (libssl.so.3 -> libssl.so.3.0.2). Osadzona nazwa SONAME pozwala ładowarce wybrać kompatybilną wersję, dzięki czemu stare programy działają nadal po aktualizacji biblioteki.
Czy mogę usunąć pliki .so, aby zwolnić miejsce?
Nie te znajdujące się w systemowych katalogach bibliotek - programy i system operacyjny zależą od nich, a ich usunięcie powoduje błędy „cannot open shared object file”. Biblioteki należy usuwać wyłącznie poprzez odinstalowanie ich pakietu za pomocą menedżera pakietów.

Źródła

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

Odkrywaj dalej

w całej bazie danych

Najpopularniejsze rozszerzenia w tym tygodniu

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.ICSiCalendar data file

Powiązane rozszerzenia

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

Darmowe narzędzia do plików

Identyfikator plików i konwerter obrazów w przeglądarce - wszystko działa na Twoim urządzeniu.

Otwórz przybornik

Przeglądaj rozszerzenia plików A-Z