すべてではない - - のライブラリを静的にlibtoolと、それはいくつかをリンクすることは可能ですか?
-
20-09-2019 - |
質問
私はautoconfを、automakeにとのlibtoolを使用して構築されたプロジェクトに取り組んでいます。プロジェクトは両方のバイナリおよびソース形式で配布されます。
Linuxでは、デフォルトでビルドスクリプトを動的にすべてのライブラリにリンクします。 Linuxユーザは、依存関係を処理するために、その分布のパッケージマネージャに依存することができますので、これは理にかなっています。
Windowsでは、デフォルトでビルドスクリプトは、静的にlibtoolの-all-static
オプションを使用して、すべてのライブラリにリンクします。依存関係のいずれもWindowsで提供されていないので、これは理にかなって、それはかなりのDLLのトンを配布についていじくるよりも、すべての依存関係を含む単一のバイナリを配布できるようにすると便利です。
OSX上では、依存関係のいくつかは、OSによって提供されており、いくつかはそうではありません。そのためには、動的および他のライブラリに静的にOSが提供するライブラリにリンクすると便利だろう。残念ながら、libtoolがオール・オア・ナッシング-all-static
オプションだ、ここで有用ではありません。
のいくつかののライブラリを静的、すべてではない?
にリンクするのlibtoolを得るための良い方法はあります注:私だけの静的ビルドするように、私は慎重に依存関係をコンパイルする可能性が実現可能です。しかし、私はむしろ私のプロジェクトのためのビルドシステムは、とのダイナミックが利用可能であること、依存関係のビルドます。
静的の一般的なケースでは好調に推移しましたと思います注:もちろん、私はいつも上記のプラットフォームのすべての3つに動的にリンクされているC / C ++ランタイム・ライブラリー、のような本当に低レベルの依存関係にかかわっていないです。
。解決
いくつかの研究の後、私は自分の質問に答えています。
あなたは、静的および動的なを持っている場合は、は、インストールされ、ライブラリのビルド、そしてあなたは、動的なビルドに好みによってlibtoolのリンク、-l
パラメータを使用しているライブラリにリンクします。あなたが-static
や-all-static
オプションを渡す場合には、利用可能な動的なビルドが存在しない場合は、静的ビルドにリンク、もしくはます。
のlibtoolは-l
オプションの代わりに、そのライブラリへのフルパスを与えることによって、静的ライブラリにリンクするように強制することができます。