私はautoconf、automake、libtoolを使用して構築されたプロジェクトに取り組んでいます。プロジェクトは、バイナリ形式とソース形式の両方で配布されます。
Linuxでは、デフォルトで、ビルドスクリプトはすべてのライブラリに動的にリンクします。Linuxユーザーは、ディストリビューションのパッケージマネージャーを使用して依存関係を処理できるため、これは理にかなっています。
Windowsでは、デフォルトで、ビルドスクリプトはlibtoolの-all-static
オプションを使用して静的にすべてのライブラリにリンクします。Windowsには依存関係がないため、これは理にかなっています。大量のDLLを配布するのではなく、すべての依存関係を含む単一のバイナリを配布できると便利です。
OSXでは、依存関係の一部はOSによって提供され、一部は提供されません。したがって、OSが提供するライブラリに動的にリンクし、他のライブラリに静的にリンクすると便利です。残念ながら、libtoolのall-or-nothing-all-static
オプションはここでは役に立ちません。
libtoolを静的にいくつかのライブラリにリンクさせる良い方法はありますが、すべてではありませんか?
注:静的ビルドのみが使用できるように、依存関係を注意深くコンパイルできることに気付きました。ただし、依存関係の静的および動的ビルドが利用可能であるという一般的なケースでは、プロジェクトのビルドシステムが堅牢であることを望んでいます。
注:もちろん、上記の3つのプラットフォームすべてで常に動的にリンクされているC /C++ランタイムライブラリのような実際に低レベルの依存関係については気にしません。