「メディア プレーヤー」の部分については、実行時にロードされる単純な動的ライブラリであるプラグインが明らかに使用されることを除いて、詳しく説明しません。これらのプラグインを依存関係に動的にリンクすることも、静的にリンクすることもできます。どちらにも長所と短所があります。Linux は共有ライブラリを使用するため、ここでは数えません。
共有ライブラリを使用する唯一の利点は、ライブラリをプログラムから独立して更新できることです。Windows では、ライブラリがそれを使用するアプリケーションの隣にあるため、これが利点になることはめったにありません (公式の C++ ABI がないため)。Windows では、DLL 地獄を減らし、C ライブラリを共有するために、SxS を使用する必要がありますが、これはあまり良い市民ではありません。
静的ライブラリに関しては、リンク時の最適化という大きな利点が 1 つあります。これらはかなり前から ICC と VC++ でサポートされており、GCC にはそれらのブランチがあります。私はおそらく Windows で VC++ を使用するので、コンパイラー (実際の「コンパイラー」は C++ を中間言語に変換するだけなので、ここではコンパイラーは「リンカー」です) がコーディングし、この方法で多くのものを最適化できます。これは私が傾いているオプションです。
私の質問は、私の特定のケースではどれが最適でしょうか?
この問題では Linux (OS X の知識はありませんが) や複数のインスタンス (同じメディア プレーヤーを 2 回実行するのは誰ですか?)、バイナリ互換性 (私がアプリケーションと一緒にすべてを配布します) または更新が簡単です (Windows では、更新を配布するために非常に効率的なバイナリ diff パッチャーを使用します)。