現在、D の私のプロジェクトには、さまざまなライブラリがたくさんあります。それらを静的にリンクして単一のexeにすることは可能ですか(サイズは問題ありません)。
どのコマンドを DMD に渡す必要がありますか、または DUB 構成で指定する方法はありますか?
ラチェットフリークが言ったように、依存関係を静的ライブラリ自体としてコンパイルする必要があります。依存関係を静的ライブラリとして取得したら、動的ライブラリと同じように のlibs
エントリに一覧表示できます。dub.json
素晴らしい例ではないかもしれませんが、静的ビルドdub.json
と動的ビルドの両方を作成したいプロジェクトを管理するために使用するものを次に示します。このセクションを使用しconfigurations
て、静的ビルドと動的にリンクされたビルドを分離します。ビルドするときは、フラグを使用し--config=
て静的ビルドと動的ビルドのどちらかを選択します。
依存関係の静的ライブラリを自分で作成し、それらをシステムのライブラリ検索パスに配置したくない場合は、 -L オプションを使用しlflags
て静的ライブラリの場所を指定できます。
直接の依存関係を静的にコンパイルしても、必ずしもプロジェクトに動的な依存関係がないというわけではありません。依存関係の依存関係に動的にリンクしている可能性があります (それらも静的にコンパイルしない限り)。たとえば、上でリンクしたプロジェクトはallegro
とそのモジュールに静的にリンクされていますが、allegro
同様libogg
に andの依存関係に動的にリンクされてlibpng
います (それらの静的バージョンをコンパイルしなかったため)。