GCCコンパイル済み静的ライブラリには何が含まれていますか?
-
05-07-2019 - |
質問
私のアプリケーションはlibsamplerate.aにリンクしています。最終的なバイナリの配布を容易にするためにこれを行っています。
.aファイル内のコードは、おそらく私が配布する必要のある他のライブラリに依存するのではないかと心配しています。
しかし、もしそれが心配でなければ、例えばの複数のコピーを含めることでアプリケーションを肥大化しすぎます。 libc。
libsamplerate.aには正確に何が含まれますか? libsamperateのバイトコードだけですか?それ以上?
解決
静的ライブラリは、単なるオブジェクトファイルのコレクションです。静的ライブラリに対してプログラムをコンパイルすると、プログラムで使用される関数のオブジェクトコードがライブラリから実行可能ファイルにコピーされます。静的ライブラリにリンクしても、そのライブラリの外部にある関数はコードに含まれません。
他のヒント
.aファイルは、基本的には.oファイルの単なるバンドルです。これは、 ar
ツールを使用して実証できます。
たとえば、ライブラリのコンテンツを表示するには:
ar -t libsamplerate.a
最初から.aファイルを作成するには:
ar -r tim.a *.txt
libsamplerateのオブジェクトコードのみ。単一のライブラリに対して静的にリンクしても、すべてのライブラリが静的にリンクされるわけではありません。それは悪いだろう。
所属していません StackOverflow