.so と .dylib ファイル拡張子の違いを明確にする
概要:
macOS では、ダイナミック ライブラリは.so 共有オブジェクトまたは .dylib 動的ロード可能モジュールとしてパッケージ化されます。これら 2 つの形式の違いを理解することは、ライブラリを効果的に管理するために非常に重要です。
概念的な違い:
-
オブジェクト タイプ: .dylib ファイル.so ファイルはロード可能なモジュールですが、Mach-O 共有ライブラリ (MH_DYLIB) です。 (MH_BUNDLE) 通常、プラグインまたは拡張アプリケーションとして機能します。
-
リンク: .dylib ファイルは通常のリンク フラグを使用して静的にリンクできますが、.so バンドルはこの方法ではリンクできません。 .
.so と.dylib:
-
Use .dylib: システム ライブラリや複数のアプリケーション間で共有されるコードなど、動的読み込みを目的としていない共有ライブラリの場合。
-
Use .so: アプリケーションのアクセスに必要な、動的にロードされるプラグインまたはアプリケーション拡張機能の場合API.
コンパイル:
- .dylib 共有ライブラリ: コンパイラで -dynamiclib フラグを使用します。
- .soロード可能なバンドル: -bundle フラグをコンパイラ。
サポートと履歴:
-
動的ロード: .dylib は当初、動的ロードと互換性がありませんでしたが、サポートされていますmacOS 10.4で追加されました。どちらのファイル形式も、dlopen、dlclose、およびその他の DL 機能をサポートするようになりました。
-
レガシー: 歴史的には、.so と .dylib の違いはより重要でした。 .so バンドルは動的読み込み専用に使用されていましたが、.dylib 共有ライブラリは静的にのみリンクできました。これらの制限は時間の経過とともに解除され、ファイル形式の選択がより微妙になりました。
追加情報:
- macOS では、「バンドル」実行可能コードとリソースを含む特定の構造を持つディレクトリを参照することもできます。これらのディレクトリを、ライブラリやプラグインに使用される Mach-O バンドルと混同しないでください。
参考資料:
- Fink 移植ガイド
- ld(1) および dlopen(3)
- 動的ライブラリ プログラミング トピック
- Mach-O プログラミング トピック
以上がmacOS の .so と .dylib: 主な違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。