ライブラリの配置場所
最善の解決策は、Linux ディストリビューションのパッケージ システム (apt-get
、 yum
、または同様のもの) を使用して、可能な限りディストリビューションが提供するパッケージからライブラリをインストールします。
ディストリビューションのパッケージ化されたライブラリが十分に新しいバージョンでない場合、または非標準のビルド オプションが必要な場合、またはディストリビューションで提供されていないライブラリが必要な場合は、自分でビルドしてインストールできます。ライブラリを配置する場所には、主に 2 つのオプションがあります。
/usr/local
(/usr/local/lib
以下のライブラリ 、/usr/local/include
の下のヘッダー )。これにより、システム全体にライブラリがインストールされ、追加の手順を実行せずにそれらに対してビルドできるため、おそらく最も簡単なソリューションです。ライブラリを/usr
の直下にインストールしないでください 、これはディストリビューションのパッケージング システムに干渉するためです。- Windows で行ったように、プロジェクト ディレクトリの下。これには、ルート アクセスを必要とせず、システム全体の変更を行わないという利点がありますが、プロジェクトのインクルード パスとライブラリ パスを更新する必要があり、共有ライブラリ ファイルをダイナミック リンカーが見つけられる場所に配置する必要があります (
LD_LIBRARY_PATH
を使用 またはld.so.conf
- 詳細については、リンクを参照してください)。
ライブラリの仕組み
David A. Wheeler の優れた Programming Library HOWTO を参照してください。それを読んでから、特定の質問を新しいトピックとして投稿することをお勧めします。
プログラムの配布方法
従来、Unix / Linux プログラムには依存関係のコピーが含まれていません。代わりに、これらの依存関係を自分でインストールするのは、エンド ユーザーまたは開発者次第です。あなたが言ったように、これには「大きな README」が必要になる場合がありますが、いくつかの利点があります。
- 開発ライブラリは、各ソース コピーが追跡する独自のライブラリ セットを持つ代わりに、ディストリビューションのパッケージ マネージャーを介してインストール、管理、および更新できます。
- システムには特定のライブラリのコピーが 1 つしかないため、たとえばセキュリティ上の欠陥が見つかった場合に更新が必要な場所は 1 つだけです。 (たとえば、非常に広く使用されている圧縮ライブラリである zlib にセキュリティ上の欠陥があることが判明し、影響を受けるバージョンを含むすべてのアプリケーションを更新する必要があったときに生じた混乱を考えてみてください。)
- あなたのプログラムが十分に人気がある (そしてオープン ソースであるか、少なくとも自由に利用できる) 場合、さまざまな Linux ディストリビューションのパッケージ メンテナーは、それをパッケージ化してディストリビューションに含めたいと思うかもしれません。パッケージメンテナーは本当に バンドルされたライブラリが好きではありません。たとえば、このトピックに関する Fedora のページを参照してください。
プログラムをエンド ユーザーに配布する場合は、パッケージ (.dpkg
) の提供を検討することをお勧めします。 または .rpm
) ソースを使用せずにダウンロードしてインストールするだけで済みます。理想的には、エンド ユーザーの観点から、パッケージはディストリビューションのリポジトリに追加され (オープン ソースまたは少なくとも自由に利用できる場合)、ユーザーはパッケージ マネージャー (apt-get
) を使用してダウンロードできます。 または yum
)。多数の Linux ディストリビューションが存在するため、これはすべて複雑になる可能性がありますが、Debian/Ubuntu 互換の .dpkg
および Red Hat/CentOS/Fedora 互換の .rpm
エンド ユーザーのかなりの割合をカバーする必要があります。パッケージの構築はそれほど難しくなく、オンラインには優れたハウツーがあります。
Windows に関する質問の最初の部分について:Windows にはライブラリ/ヘッダーの実際の標準的な場所がないため、簡単な解決策は、独自のものを作成することです。システムに 1 つの lib/ と include/ を指定するだけで、すべてのプロジェクトでそれを使用できます (どこにでも含める cmake ファイルにパスを設定することにより)。そこにすべてのサードパーティ ライブラリを配置します。たとえば、
あなたのプロジェクト:
d:/projects/projectA
d:/projects/projectB
サードパーティのもの:
d:/api/lib/lua.lib
d:/api/include/lua/....
(バージョンが異なる場合は、「ディレクトリ ジャンクション」とも呼ばれるシンボリック リンクを使用することもできます)
および対応する cmake ファイル:
include_directories( d:/api/include )
link_directories( d:/api/lib )