共有コードと動的にロード可能なモジュールは、どちらもソフトウェア開発の基本コンポーネントです。 macOS では、これらのエンティティはそれぞれ .so ファイルと .dylib ファイルで表されます。ただし、2 つのファイル タイプの区別は曖昧な場合があります。
概念的な違い
Mach-O (Mach Object) は、.so と .so の両方の基礎となるファイル形式です。 .dylib ファイル。ただし、これらは異なる Mach-O オブジェクト ファイル タイプに属します。 .dylib ファイルは共有ライブラリ (MH_DYLIB) として分類されますが、.so ファイルは動的にロードされるモジュール (MH_BUNDLE) のカテゴリに属します。
各タイプを使用する場合
共有ライブラリ(.dylib):
動的にロードされるモジュール(.so):
コンパイル手法
内macOS の場合、共有ライブラリを作成するための適切なコンパイラ フラグは次のとおりです。
-dynamiclib
読み込み可能なモジュールを生成するには、代わりに次のフラグを使用します。
-bundle
Linux とは異なり、共有コードはライブラリと動的読み込みの両方に使用されるため、macOS ではこれらの関数が厳密に分離されています。
歴史的進化
歴史的には、.so ファイルと .dylib ファイルの区別はより明確でした。 macOS の初期バージョンでは、dylib は特定の API を介してのみロードできました。 dylibs を使用した dlopen のサポートは、いくつかの OS バージョンにわたって段階的に導入されました。
追加の考慮事項
参考資料:
以上がmacOS 上の .so と .dylib: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。