2 つの「ar」静的ライブラリを 1 つにマージするにはどうすればよいでしょうか? 質問する

2 つの「ar」静的ライブラリを 1 つにマージするにはどうすればよいでしょうか? 質問する

ar crlibabc.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

おすすめ記事