ar cr
とlibabc.a
によって作成された 2 つの静的 Linux ライブラリがありますlibxyz.a
。
これらを 1 つの静的ライブラリ にマージしたいと考えていますlibaz.a
。
どうすればよいですか。
アプリケーションの最終リンクに両方のライブラリを与えるのではなく、マージされた静的ライブラリを作成したいと考えています。
ベストアンサー1
これを行うには少なくとも3つの方法がありますネイティブ最初の、そして最も移植性の高い方法は、libtool を使用することです。他のライブラリも libtool でビルドした後、.la ライブラリを automake libaz_la_LIBADD 変数に追加するか、または次のような Makefile から直接追加するだけで、それらを結合できます。
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
他の 2 つは、少なくとも GNU ar を使用する場合に利用できます。次のような MRI スクリプト (たとえば、libaz.mri という名前) を使用できます。
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
そしてarを次のように実行します:
ar -M <libaz.mri
または、薄いarchive (オプション-T
) を使用すると、他のアーカイブをネストせずに追加できますが、欠点は、静的ライブラリを配布する場合に、分離されたオブジェクトが失われることです。
ar -rcT libaz.a libabc.a libxyz.a
上記のすべての方法は、元のアーカイブからの重複するメンバー名を適切に処理します。
そうしないと、重複するメンバー名が置き換えられないように、別のディレクトリに解凍して再度パックする必要があります。
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz