6

私はautoconf、automake、libtoolを使用して構築されたプロジェクトに取り組んでいます。プロジェクトは、バイナリ形式とソース形式の両方で配布されます。

Linuxでは、デフォルトで、ビルドスクリプトはすべてのライブラリに動的にリンクします。Linuxユーザーは、ディストリビューションのパッケージマネージャーを使用して依存関係を処理できるため、これは理にかなっています。

Windowsでは、デフォルトで、ビルドスクリプトはlibtoolの-all-staticオプションを使用して静的にすべてのライブラリにリンクします。Windowsには依存関係がないため、これは理にかなっています。大量のDLLを配布するのではなく、すべての依存関係を含む単一のバイナリを配布できると便利です。

OSXでは、依存関係の一部はOSによって提供され、一部は提供されません。したがって、OSが提供するライブラリに動的にリンクし、他のライブラリに静的にリンクすると便利です。残念ながら、libtoolのall-or-nothing-all-staticオプションはここでは役に立ちません。

libtoolを静的にいくつかのライブラリにリンクさせる良い方法はありますが、すべてではありませんか?

:静的ビルドのみが使用できるように、依存関係を注意深くコンパイルできることに気付きました。ただし、依存関係の静的および動的ビルドが利用可能であるという一般的なケースでは、プロジェクトのビルドシステムが堅牢であることを望んでいます。

:もちろん、上記の3つのプラットフォームすべてで常に動的にリンクされているC /C++ランタイムライブラリのような実際に低レベルの依存関係については気にしません。

4

1 に答える 1

7

いくつかの調査の後、私は自分の質問に答えました。

ライブラリの静的ビルドと動的ビルドがインストールされていて、パラメータを使用してそのライブラリにリンクしている場合-l、libtoolは優先的に動的ビルドにリンクします。使用可能な動的ビルドがない場合、-staticまたはまたは-all-staticオプションを渡すと、静的ビルドにリンクします。

オプションの代わりにそのライブラリへのフルパスを指定することにより、libtoolを静的ライブラリに強制的にリンクさせることができ-lます。

于 2009-12-26T19:45:10.160 に答える