.SO

Файл SO

Shared Object (ELF shared library)
Задать вопрос
БЫСТРЫЙ ОТВЕТ

Файл .so - это разделяемая библиотека (shared object) в Linux и Unix, эквивалент Windows .dll. Программы загружают её автоматически во время выполнения; вы никогда не открываете её напрямую. Если приложение выдает ошибку «cannot open shared object file», установите недостающую библиотеку через менеджер пакетов вашего дистрибутива (apt, dnf, pacman), а не скачивайте файл со сторонних сайтов.

Разработчик: Unix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI) Категория: Системные файлы Открыть стандартное MIME: application/x-sharedlib
ОТКРЫВАЕТСЯ НА macOS Linux
Связанные: .NOMEDIA · .DLL · .TMP · .LNK

На этой странице

Проиндексировано расширений: 19k+
Последняя проверка: Jun 17, 2026

Не знаете, что это за файл?

Перетащите любой файл в наш идентификатор - мы прочитаем первые байты, чтобы определить формат.

Идентифицировать файл

Что такое формат файла SO?

Файл .so содержит динамически загружаемую разделяемую библиотеку для приложений Unix и Linux. .so - это бинарный файл, используемый для предоставления доступа к общему коду и данным, которые одна или несколько программ могут использовать при запуске. Расширение расшифровывается как Shared Object (общий объект), что отражает тот факт, что после загрузки библиотеки в память её объекты - функции и данные - могут быть доступны нескольким процессам одновременно. Для файлов .so зарегистрирован MIME-тип application/x-sharedlib.

Библиотеки .so являются объектами ELF (сокращение от Executable and Linkable Format) - это стандартный бинарный формат, используемый в Linux и многих Unix-подобных системах для исполняемых файлов, скомпилированных объектов, разделяемых библиотек и дампов памяти (core dumps). Каждый корректный ELF-файл, включая файлы .so, начинается с четырехбайтового магического числа \x7FELF по смещению 0. Структура файла включает:

  • Заголовок ELF - определяет архитектуру, порядок байтов (endianness) и разрядность (32-бит или 64-бит), а также количество записей в таблицах сегментов и разделов;
  • Таблица заголовков программы - описывает сегменты памяти, используемые во время загрузки;
  • Таблица заголовков разделов - описывает отдельные разделы, используемые компоновщиком и отладчиком;
  • Данные, на которые ссылаются эти заголовки.

Сегменты используются во время выполнения программы и могут состоять из нескольких разделов; разделы используются во время операции компоновки. Файлы .so могут быть скомпонованы с программой на этапе компиляции или загружены во время выполнения через dlopen().

Имена файлов .so следуют соглашению, согласно которому имени библиотеки предшествует префикс lib - например, библиотека с именем abc будет иметь имя файла libabc.so, а при компоновке с ней используется флаг -labc. За суффиксом .so может следовать номер версии, например libabc.so.3 для файла основной версии или libabc.so.3.1.2 для сборки с полной версией. На практике libabc.so часто является лишь символической ссылкой, указывающей на реальный файл с версией, а libabc.so.3 сам может быть симлинком на последний совместимый выпуск. Версия, хранящаяся в динамической записи DT_SONAME, - это то, что записывает и проверяет динамический компоновщик ld.so. Некоторые низкоуровневые системные библиотеки, такие как сам ld.so, не следуют соглашению о префиксе lib.

В Windows эквивалентной концепцией является файл .DLL; в macOS - файл .dylib. Статические альтернативы в Linux архивируются в файлы .a.

Безопасность и защита

РИСК: MEDIUM

Файл .so - это исполняемый нативный код, который запускается внутри любого загрузившего его процесса, поэтому вредоносная библиотека может делать всё то же самое, что и основная программа. Реальные риски: (1) подмена библиотеки - вредоносный .so, помещенный там, где загрузчик ищет в первую очередь, или злоупотребление LD_PRELOAD/LD_LIBRARY_PATH может внедрить код в легитимную программу; (2) скачивание отдельных файлов .so с сомнительных сайтов для исправления ошибок - они могут быть вредоносными или несовместимыми по ABI, что может сломать или скомпрометировать систему. Всегда устанавливайте библиотеки из подписанных репозиториев вашего дистрибутива. Удаление системных файлов .so (в /lib, /usr/lib) может сделать ОС или приложения неработоспособными.

Детали формата

в двух словах
ПОЛНОЕ НАЗВАНИЕShared Object (ELF shared library)
РАЗРАБОТЧИКUnix/Linux ecosystem (no single vendor; ELF defined by the Tool Interface Standard / System V ABI)с ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
MIME-ТИПapplication/x-sharedlib
ТИПРазделяемая библиотека ELF (Executable and Linkable Format) - скомпилированный нативный машинный код
СТАНДАРТОткрытый · без роялти
СВЯЗАННЫЕ.nomedia.dll.tmp.lnk
MAGIC BYTES · СИГНАТУРА ФАЙЛА
СМЕЩЕНИЕ
00010203
HEX
7F454C46
ASCII
·ELF
Первые четыре байта - 0x7F, за которыми следует «ELF». Байт 4 (EI_CLASS) равен 1 для 32-бит / 2 для 64-бит; байт 5 (EI_DATA) определяет порядок байтов; поле e_type (смещение 16) имеет значение ET_DYN (0x0003) для общего объекта. Тот же заголовок ELF используется исполняемыми и объектными файлами Linux, поэтому обозначение .so происходит от e_type + роли файла, а не от отдельного магического числа.

Программы, открывающие файлы SO

macOS1 app
binutils / file / Ghidra Открытый код macOS нативно использует .dylib, но файлы .so из Linux можно изучить с помощью кросс-платформенных binutils или Ghidra. Команда «file lib.so» подтвердит, что это общий объект ELF.
Linux4 apps
System dynamic linker (ld.so) + package manager Встроенная Вы не «открываете» .so - загрузчик использует его автоматически. Чтобы исправить отсутствие файла, установите пакет, который его предоставляет: «apt install libfoo» / «dnf install foo» / «pacman -S foo». Используйте «ldconfig» для обновления кэша.
binutils (nm / objdump / readelf) Открытый код Проверка .so в командной строке: «nm -D lib.so» выводит список символов, «readelf -d lib.so» показывает SONAME/зависимости, «objdump -d lib.so» выполняет дизассемблирование.
ldd Встроенная Команда «ldd ./program» или «ldd lib.so» выводит список необходимых общих объектов и информацию о том, найден ли каждый из них - это первое, что нужно запустить при ошибке «missing .so».
Ghidra Открытый код Импортируйте .so для полного дизассемблирования/декомпиляции при обратной разработке нативного кода (также работает на Windows/macOS).

Технические подробности

глубокая спецификация
MIME-типapplication/x-sharedlib
Магические байты7F 45 4C 46 («\x7FELF») по смещению 0 - идентичная метка для всех ELF-файлов; поле e_type отличает общие объекты
Значение ELF e_typeET_DYN (0x0003) - отличает общий объект от исполняемого файла (ET_EXEC = 0x0002) или перемещаемого объекта (ET_REL = 0x0001)
РазрядностьБайт EI_CLASS по смещению 4: 1 = 32-бит (Elf32), 2 = 64-бит (Elf64); оба варианта широко распространены в Linux
Порядок байтовБайт EI_DATA по смещению 5: 1 = little-endian (ELFDATA2LSB), 2 = big-endian (ELFDATA2MSB); зависит от архитектуры
Позиционно-независимый кодДолжен быть скомпилирован с флагом -fPIC, чтобы библиотека могла быть отображена на любой виртуальный адрес без конфликтов перемещения между процессами
Таблица динамических символовРаздел .dynsym экспортирует и импортирует символы, видимые во время выполнения; .dynstr хранит соответствующие строки имен
PLT / GOTProcedure Linkage Table и Global Offset Table обеспечивают ленивое (по умолчанию) или немедленное (-z now) разрешение символов при загрузке
soname (DT_SONAME)Каноническое имя библиотеки, встроенное в динамический раздел ELF; ld.so записывает это имя при компоновке программы, что позволяет отслеживать версию ABI независимо от имени файла
Версионность символовРазделы .gnu.version и .gnu.version_r позволяют использовать несколько версий символов в одном файле, обеспечивая обратно совместимую эволюцию ABI
Динамический компоновщикЗагружается через ld.so / ld-linux-x86-64.so.2; путь поиска управляется LD_LIBRARY_PATH, DT_RUNPATH или /etc/ld.so.conf + кэш ldconfig
Соглашение об именованииlib<имя>.so[.мажор[.минор.патч]]; libabc.so обычно является симлинком для разработки → libabc.so.3 → libabc.so.3.1.2
Встроенный путь поискаДинамические записи DT_RPATH или DT_RUNPATH вшивают пути поиска библиотек в файл во время компоновки; DT_RUNPATH предпочтительнее, так как его можно переопределить через LD_LIBRARY_PATH
Инструменты проверкиreadelf -a, objdump -d, nm --dynamic (binutils); ldd для вывода списка зависимостей; команда file определяет тип ELF и архитектуру
ВыпущенELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
Открыть стандартноеДа · без роялти
Спецификацияrefspecs.linuxfoundation.org

Конвертации SO

Вопросы и ответы сообщества

спрошено пользователями
Задать быстрый вопрос
Получите помощь от людей, работающих с файлами SO. Будьте конкретны - укажите вашу систему и версию ПО.
Аккаунт не нужен · ответы обычно в течение дня

Вопросов пока нет - станьте первым, кто спросит о файлах SO.

Часто задаваемые вопросы

Как исправить ошибку «error while loading shared libraries: libXXX.so» в Linux?
Установите пакет, предоставляющий библиотеку, с помощью вашего менеджера пакетов (например, «sudo apt install libxxx» в Debian/Ubuntu, «sudo dnf install xxx» в Fedora). Выполните поиск с помощью «apt-file search libxxx.so» или поиска пакетов вашего дистрибутива. Не скачивайте .so со сторонних сайтов.
Что такое файл .so?
Общий объект (shared object) - динамически подключаемая библиотека скомпилированного кода в Linux/Unix, аналог Windows .dll. Программы загружают её во время выполнения, чтобы использовать общий код вместо того, чтобы включать его копию в каждый исполняемый файл.
Является ли .so тем же самым, что и Windows DLL?
Функционально - да, оба являются динамическими разделяемыми библиотеками, загружаемыми во время выполнения. Но они не взаимозаменяемы: .so - это код ELF для Linux/Unix, а .dll - это код PE для Windows. Вы не можете запустить один в ОС, предназначенной для другого.
Можно ли открыть или запустить файл .so напрямую?
Нет - у него нет точки входа, он загружается другими программами, а не запускается сам по себе. Чтобы заглянуть внутрь, используйте инструменты разработчика: «nm -D», «readelf -d», «objdump -d» или декомпилируйте с помощью Ghidra.
Почему у файлов .so есть номера, например libssl.so.3?
Это номера версий. libssl.so обычно является цепочкой симлинков, указывающих на конкретный файл версии (libssl.so.3 -> libssl.so.3.0.2). Встроенное имя SONAME позволяет загрузчику выбрать совместимую версию, чтобы старые программы продолжали работать при обновлении библиотеки.
Можно ли удалить файлы .so для экономии места?
Только не те, что находятся в системных каталогах библиотек - программы и ОС зависят от них, и их удаление приведет к ошибкам «cannot open shared object file». Удаляйте библиотеки только путем деинсталляции их пакета через менеджер пакетов.

Ссылки

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

Узнать больше

по всей базе данных

Популярные расширения на этой неделе

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

Похожие расширения

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

Бесплатные инструменты для файлов

Идентификатор файлов и конвертер изображений в браузере - все работает на вашем устройстве.

Открыть инструменты

Обзор расширений файлов A-Z