CPP ソース (H ファイルと CPP ファイル) のコレクションをまとめて「ライブラリ」にコンパイルし、それを他のプログラムやライブラリで使用できます。これを行う方法の詳細は、プラットフォームとツールチェーンに固有であるため、詳細を発見するのはあなたに任せます。ただし、読むことができるいくつかのリンクを提供します。
gnu コンパイラを使用した共有および静的ライブラリの作成 [gcc]
チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)
ライブラリは、ソース コード ライブラリとバイナリ ライブラリの 2 種類に分けることができます。これら 2 つのタイプのハイブリッドも存在する可能性があります。ライブラリは、ソース ライブラリとバイナリ ライブラリの両方になることができます。ソース コード ライブラリは、単にソース コードとして配布されるコードのコレクションです。通常、ヘッダー ファイル。Boost ライブラリのほとんどはこのタイプです。バイナリ ライブラリは、クライアント プログラムによって実行時に読み込み可能なパッケージにコンパイルされます。
バイナリ ライブラリの場合でも (もちろんソース ライブラリの場合も)、ライブラリのユーザーにヘッダー ファイル (または複数のヘッダー ファイル) を提供する必要があります。これにより、クライアント プログラムのコンパイラに、ライブラリで検索する関数などを伝えます。ライブラリの作成者がよく行うのは、ライブラリによってエクスポートされるすべての宣言で構成された単一のマスター ヘッダー ファイルであり、クライアントは#include
そのヘッダーを使用します。後で、バイナリ ライブラリの場合、クライアント プログラムはライブラリに「リンク」し、これにより、ヘッダーに記載されているすべての名前が実行可能なアドレスに解決されます。
クライアント側のヘッダー ファイルを作成するときは、複雑さを念頭に置いてください。一部のクライアントが、ライブラリのいくつかの部分のみを使用したい場合がよくあります。ライブラリのすべてを含む 1 つのマスター ヘッダー ファイルを作成すると、クライアントのコンパイル時間が不必要に長くなります。
この問題に対処する一般的な方法は、ライブラリの相関部分に個別のヘッダー ファイルを提供することです。Boost のすべてを 1 つのライブラリと考える場合、Boost はその一例です。Boost は膨大なライブラリですが、正規表現機能だけが必要な場合は、正規#include
表現関連のヘッダーだけでその機能を取得できます。正規表現だけが必要な場合は、すべての Boostを含める必要はありません。
Windows と Linux の両方で、バイナリ ライブラリはさらに動的と静的の 2 つのタイプに分けることができます。静的ライブラリの場合、ライブラリのコードはクライアント プログラムの実行可能ファイルに実際に「インポート」されます (適切な用語がないため)。静的ライブラリはあなたによって配布されますが、これはコンパイル ステップ中にクライアントによってのみ必要とされます。これは、クライアントにプログラムで追加のファイルを配布することを強制したくない場合に便利です。また、依存地獄を回避するのにも役立ちます. 一方、動的ライブラリはクライアント プログラムに直接「インポート」されず、実行時にクライアント プログラムによって動的にロードされます。これにより、クライアント プログラムのサイズが削減され、複数のプログラムが同じ動的ライブラリを使用する場合にディスク フットプリントが削減される可能性がありますが、クライアント プログラムと共にライブラリ バイナリを配布およびインストールする必要があります。