.SO

SO ファイル

Shared Object (ELF shared library)
質問する
クイック回答

.soファイルは、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
対応OS macOS Linux
関連: .NOMEDIA · .DLL · .TMP · .LNK

このページの内容

19k+ 個の拡張子を索引済み
最終確認日:Jun 17, 2026

ファイルの種類がわかりませんか?

ファイルを識別ツールにドロップしてください。最初の数バイトを読み取って形式を特定します。

ファイルを識別する

SO ファイル形式とは?

.so ファイルには、UnixおよびLinuxアプリケーション用の 動的にロードされる共有ライブラリ が含まれています。.so は、起動時に1つ以上のプログラムが使用できる共有コードやデータへのアクセスを提供するために使用されるバイナリファイルです。拡張子は «Shared Object»(共有オブジェクト)の略で、ライブラリがメモリにロードされると、そのオブジェクト(関数やデータ)に複数のプロセスが同時にアクセスできるという事実を反映しています。.so ファイルに登録されている MIME タイプは application/x-sharedlib です。

.so ライブラリは ELFオブジェクト(Executable and Linkable Formatの略)であり、Linuxや多くのUnix系システムで実行ファイル、コンパイル済みオブジェクト、共有ライブラリ、コアダンプに使用される標準的なバイナリ形式です。.so ファイルを含むすべての有効な ELF ファイルは、オフセット0にある4バイトのマジックナンバー \x7FELF で始まります。ファイル構造は以下で構成されています:

  • ELFヘッダー - アーキテクチャ、エンディアン、ビット数(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 内)を削除すると、OSやアプリが起動しなくなる可能性があります。

形式の詳細

概要
正式名称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) 共有ライブラリ - コンパイル済みネイティブマシンコード
標準規格オープン・ロイヤリティフリー
マジックバイト ・ ファイルシグネチャ
オフセット
00010203
16進数
7F454C46
ASCII
·ELF
最初の4バイトは 0x7F に続く «ELF» です。バイト4 (EI_CLASS) は 32ビットなら 1、64ビットなら 2 です。バイト5 (EI_DATA) はエンディアンを示します。オフセット16の e_type フィールドは、共有オブジェクトの場合 ET_DYN (0x0003) です。同じ ELF ヘッダーが Linux の実行ファイルやオブジェクトファイルでも使用されるため、.so の指定は個別のマジックナンバーではなく、e_type とファイルの役割によって決まります。

SO ファイルを開くプログラム

macOS1 app
binutils / file / Ghidra オープンソース macOSはネイティブで .dylib を使用しますが、Linuxの .so ファイルは cross-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' は、必要な共有オブジェクトと、それぞれが解決されているかどうかをリストします。«.so が見つからない» エラーが発生したときに最初に実行すべきコマンドです。
Ghidra オープンソース ネイティブコードをリバースエンジニアリングする際に、完全な逆アセンブル/デコンパイルのために .so をインポートします(Windows/macOSでも動作します)。

技術的詳細

詳細仕様
MIMEタイプapplication/x-sharedlib
マジックバイトファイルオフセット0に 7F 45 4C 46 ("\x7FELF") - すべての ELF ファイルと同一のマジック。e_type フィールドで共有オブジェクトを区別します
ELF e_type 値ET_DYN (0x0003) - 共有オブジェクトを実行ファイル (ET_EXEC = 0x0002) や再配置可能オブジェクト (ET_REL = 0x0001) と区別します
ビット数オフセット4の EI_CLASS バイト:1 = 32ビット (Elf32)、2 = 64ビット (Elf64)。Linuxでは両方のバリアントが広く展開されています
エンディアンオフセット5の EI_DATA バイト:1 = リトルエンディアン (ELFDATA2LSB)、2 = ビッグエンディアン (ELFDATA2MSB)。アーキテクチャに依存します
位置独立コードプロセス間での再配置の競合なしにライブラリを任意の仮想アドレスにマップできるよう、-fPIC でコンパイルする必要があります
動的シンボルテーブル.dynsym セクションは実行時に表示されるシンボルをエクスポートおよびインポートし、.dynstr は対応する名前文字列を保持します
PLT / GOTプロシージャリンクテーブル (PLT) とグローバルオフセットテーブル (GOT) により、ロード時の遅延(デフォルト)または即時 (-z now) シンボル解決が可能になります
soname (DT_SONAME)ELF 動的セクションに埋め込まれた標準的なライブラリ名。ld.so はプログラムのリンク時にこの名前を記録し、ファイル名に依存しない ABI バージョンの追跡を可能にします
シンボルバージョニング.gnu.version および .gnu.version_r セクションにより、1つのファイル内で複数のシンボルバージョンを許可し、後方互換性のある ABI の進化を可能にします
ランタイムリンカーld.so / ld-linux-x86-64.so.2 によってロードされます。検索パスは LD_LIBRARY_PATH、DT_RUNPATH、または /etc/ld.so.conf + ldconfig キャッシュによって制御されます
命名規則lib<name>.so[.major[.minor.patch]]; libabc.so は通常、開発用のシンボリックリンク → libabc.so.3 → libabc.so.3.1.2 です
埋め込み検索パスDT_RPATH または DT_RUNPATH 動的エントリは、リンク時にライブラリ検索パスをファイルに焼き付けます。LD_LIBRARY_PATH で上書きできるため、DT_RUNPATH が推奨されます
検査ツールreadelf -a, objdump -d, nm --dynamic (binutils); 依存関係リスト用の ldd; ELF タイプとアーキテクチャを識別する file コマンド
リリース日ELF format 1990s (System V Release 4); .so shared libraries are core to Linux/Unix
オープンスタンダードはい · ロイヤリティフリー
仕様書refspecs.linuxfoundation.org

SO の変換

コミュニティ Q&A

ユーザーからの質問
質問する
SO ファイルを扱うユーザーからヘルプを得られます。OSやソフトウェアのバージョンなど、具体的に記載してください。
アカウント不要 ・ 通常1日以内に回答されます

まだ質問はありません。SO ファイルについて最初の質問をしてみましょう。

よくある質問

Linuxで 'error while loading shared libraries: libXXX.so' を修正するにはどうすればよいですか?
パッケージマネージャーを使用して、そのライブラリを提供するパッケージをインストールしてください(例:Debian/Ubuntuでは 'sudo apt install libxxx'、Fedoraでは 'sudo dnf install xxx')。'apt-file search libxxx.so' やディストリビューションのパッケージ検索で探してください。ウェブサイトから .so をダウンロードしないでください。
.soファイルとは何ですか?
共有オブジェクト(Shared Object)であり、Linux/Unix上のコンパイル済みコードの動的リンクライブラリです。Windowsの .dll に相当します。プログラムは実行時にこれをロードするため、各プログラムがコピーを保持する代わりに共通のコードを共有できます。
.soはWindowsのDLLと同じですか?
機能的にはイエスです。どちらも実行時にロードされる動的共有ライブラリです。しかし、互換性はありません。.so は Linux/Unix 用の ELF コードであり、.dll は Windows 用の PE コードです。一方のOSで他方のOS用を動かすことはできません。
.soファイルを直接開いたり実行したりできますか?
いいえ。エントリポイントを持たず、他のプログラムによってロードされるもので、単独で起動することはできません。中身を確認するには、開発者ツール('nm -D'、'readelf -d'、'objdump -d')を使用するか、Ghidra でデコンパイルしてください。
なぜ .so ファイルには libssl.so.3 のような番号が付いているのですか?
これらはバージョン番号です。libssl.so は通常、特定のバージョン付きファイル(libssl.so.3 -> libssl.so.3.0.2)を指すシンボリックリンクのチェーンです。埋め込まれた SONAME により、ローダーは互換性のあるバージョンを選択できるため、ライブラリが更新されても古いプログラムが動作し続けることができます。
空き容量を増やすために .so ファイルを削除してもいいですか?
システムライブラリディレクトリにあるものは削除しないでください。プログラムやOSがそれらに依存しており、削除すると «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 で閲覧