.SO

SO File

Shared Object (ELF shared library)
Ask a question
QUICK ANSWER

A .so file is a shared object library on Linux and Unix - the Linux equivalent of a Windows .dll. Programs load it automatically at run time; you never open it directly. If an app fails with a "cannot open shared object file" error, install the missing library through your distro's package manager (apt, dnf, pacman) rather than downloading the file from a website.

Developer: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Category: System Files Open standard MIME: application/x-sharedlib
OPENS ON macOS Linux
Related: .NOMEDIA · .DLL · .TMP · .LNK

On this page

19k+ extensions indexed
Last reviewed Jun 17, 2026

Not sure what your file is?

Drop any file into our identifier - we read just the first bytes to name the format.

Identify a file

What is the SO file format?

A .so file contains a dynamically-loaded shared library for Unix and Linux applications. .so is a binary file used to provide access to shared code and data that one or more programs can use when launched. The extension stands for Shared Object, reflecting the fact that once the library is loaded into memory its objects - functions and data - can be accessed by multiple processes simultaneously. The MIME type registered for .so files is application/x-sharedlib.

.so libraries are ELF objects (short for Executable and Linkable Format), the standard binary format used across Linux and many Unix-like systems for executables, compiled objects, shared libraries, and core dumps. Every valid ELF file - including .so files - begins with the four-byte magic number \x7FELF at offset 0. The file structure comprises:

  • ELF header - defines architecture, endianness, and bitness (32-bit or 64-bit), plus the counts of entries in the segment and section tables,
  • Program header table - describes memory segments used at load time,
  • Section header table - describes individual sections used by the linker and debugger,
  • Data referenced by those headers.

Segments are used during program execution and may be composed of multiple sections; sections are used during the linking operation. .so files can be linked into a program at compile time or loaded at runtime via dlopen().

.so filenames follow a naming convention where the library name is preceded by a lib prefix - for example, a library named abc will have the filename libabc.so, and the -labc flag is used when linking against it. The .so suffix may be followed by a version number, such as libabc.so.3 for the major-version file or libabc.so.3.1.2 for a fully versioned build. In practice, libabc.so is often only a symbolic link pointing to the real versioned file, and libabc.so.3 may itself be a symlink to the most recent compatible release. The version stored in the DT_SONAME dynamic entry is what the runtime linker ld.so records and checks. Some low-level system libraries - such as ld.so itself - do not follow the lib prefix convention.

On Windows the equivalent concept is a .DLL file; on macOS it is a .dylib file. Static alternatives on Linux are archived in .a files.

Security & safety

RISK: MEDIUM

A .so is executable native code that runs inside whatever process loads it, so a malicious shared library can do anything the host program can. The real risks: (1) library hijacking - a rogue .so placed where the loader searches first, or LD_PRELOAD/LD_LIBRARY_PATH abuse, can inject code into a legitimate program; (2) downloading individual .so files from random websites to fix an error - these may be malicious or ABI-incompatible and can break or compromise the system. Always install libraries from your distribution's signed package repositories. Deleting system .so files (in /lib, /usr/lib) can render the OS or apps unbootable.

Format details

in a nutshell
FULL NAMEShared Object (ELF shared library)
DEVELOPERUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)since ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
CATEGORYSystem Files
MIME TYPEapplication/x-sharedlib
TYPEELF (Executable and Linkable Format) shared library - compiled native machine code
STANDARDOpen · royalty-free
MAGIC BYTES · FILE SIGNATURE
OFFSET
00010203
HEX
7F454C46
ASCII
·ELF
The first four bytes are 0x7F followed by "ELF". Byte 4 (EI_CLASS) is 1 for 32-bit / 2 for 64-bit; byte 5 (EI_DATA) is endianness; the e_type field (offset 16) is ET_DYN (0x0003) for a shared object. The same ELF header is used by Linux executables and object files, so the .so designation comes from e_type + file role, not a separate magic number.

Programs that open SO files

macOS1 app
binutils / file / Ghidra Open-source macOS uses .dylib natively, but Linux .so files can be inspected with cross-binutils or Ghidra. 'file lib.so' confirms it's an ELF shared object.
Linux4 apps
System dynamic linker (ld.so) + package manager Built-in You don't 'open' a .so - the loader uses it automatically. To fix a missing one, install the package that provides it: 'apt install libfoo' / 'dnf install foo' / 'pacman -S foo'. Use 'ldconfig' to refresh the cache.
binutils (nm / objdump / readelf) Open-source Inspect a .so on the command line: 'nm -D lib.so' lists symbols, 'readelf -d lib.so' shows the SONAME/dependencies, 'objdump -d lib.so' disassembles.
ldd Built-in 'ldd ./program' or 'ldd lib.so' lists which shared objects it needs and whether each resolves - the first thing to run for a 'missing .so' error.
Ghidra Open-source Import the .so for full disassembly/decompilation when reverse-engineering native code (also runs on Windows/macOS).

Technical details

deep spec
MIME typeapplication/x-sharedlib
Magic bytes7F 45 4C 46 ("\x7FELF") at file offset 0 - identical magic to all ELF files; the e_type field distinguishes shared objects
ELF e_type valueET_DYN (0x0003) - distinguishes a shared object from an executable (ET_EXEC = 0x0002) or relocatable object (ET_REL = 0x0001)
BitnessEI_CLASS byte at offset 4: 1 = 32-bit (Elf32), 2 = 64-bit (Elf64); both variants are widely deployed on Linux
EndiannessEI_DATA byte at offset 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); architecture-specific
Position-independent codeMust be compiled with -fPIC so the library can be mapped to any virtual address without relocation conflicts between processes
Dynamic symbol table.dynsym section exports and imports symbols visible at runtime; .dynstr holds the corresponding name strings
PLT / GOTProcedure Linkage Table and Global Offset Table enable lazy (default) or eager (-z now) symbol resolution at load time
soname (DT_SONAME)Canonical library name embedded in the ELF dynamic section; ld.so records this name when a program is linked, enabling ABI-version tracking independent of filename
Symbol versioning.gnu.version and .gnu.version_r sections allow multiple symbol versions within one file, enabling backward-compatible ABI evolution
Runtime linkerLoaded by ld.so / ld-linux-x86-64.so.2; search path controlled by LD_LIBRARY_PATH, DT_RUNPATH, or /etc/ld.so.conf + ldconfig cache
Naming conventionlib<name>.so[.major[.minor.patch]]; libabc.so is typically a development symlink → libabc.so.3 → libabc.so.3.1.2
Embedded search pathDT_RPATH or DT_RUNPATH dynamic entries bake library search paths into the file at link time; DT_RUNPATH is preferred as it can be overridden by LD_LIBRARY_PATH
Inspection toolsreadelf -a, objdump -d, nm --dynamic (binutils); ldd for dependency listing; file command identifies ELF type and architecture
ReleasedELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Open standardYes · royalty-free
Specificationrefspecs.linuxfoundation.org

SO conversions

Community Q&A

asked by users
Ask a quick question
Get help from people who work with SO files. Be specific - include your system and software version.
No account needed · answers usually within a day

No questions yet - be the first to ask about SO files.

Frequently asked questions

How do I fix 'error while loading shared libraries: libXXX.so' on Linux?
Install the package that provides the library with your package manager (e.g. 'sudo apt install libxxx' on Debian/Ubuntu, 'sudo dnf install xxx' on Fedora). Search with 'apt-file search libxxx.so' or your distro's package search. Don't download the .so from a website.
What is a .so file?
A shared object - a dynamically linked library of compiled code on Linux/Unix, the equivalent of a Windows .dll. Programs load it at run time so they can share common code instead of each bundling a copy.
Is a .so the same as a Windows DLL?
Functionally yes - both are dynamic shared libraries loaded at run time. But they are not interchangeable: .so is ELF code for Linux/Unix, .dll is PE code for Windows. You can't run one on the other's OS.
Can I open or run a .so file directly?
No - it has no entry point and is loaded by other programs, not launched on its own. To look inside it, use developer tools: 'nm -D', 'readelf -d', 'objdump -d', or decompile with Ghidra.
Why do .so files have numbers like libssl.so.3?
Those are version numbers. libssl.so is usually a symlink chain pointing to a specific versioned file (libssl.so.3 -> libssl.so.3.0.2). The embedded SONAME lets the loader pick a compatible version, so old programs keep working when a library updates.
Can I delete .so files to free space?
Not the ones in system library directories - programs and the OS depend on them, and removing them causes the exact 'cannot open shared object file' errors. Only remove libraries by uninstalling their package through the package manager.

References

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

Keep exploring

across the database

Top extensions this week

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

Related extensions

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

Free file tools

An in-browser file identifier and image converter - everything runs on your device.

Open the toolbox

Browse file extensions A-Z