1

アプリケーションで libA.a が必要だとします。libA.a には libB.a 自体が必要であり、アプリケーションで両方に静的にリンクする必要があります。これを解消するために、これら 2 つ (libA.a と libB.a) をマージして libAB.a を作成します (これは ar ツールを使用して行います)。まだ問題はありません。

アプリケーション (libAB.a にリンクされている) を実行したい場合、コンパイラは、libB を使用している libA 内のメソッドへの未定義の参照について不平を言い始めます! アプリを libAB.a に加えて libBa.a にリンクすると、すべて問題ありません。ファイル サイズによると、libAB.a は libA と libB のマージの結果のようですが、コンパイル時には libA のみがアプリケーションで使用できるようです。

マージコマンドは次のとおりです。

ar rcus -v ../lib/libPocoFoundationmtd.a @"Foundation.txt" "c:/MinGW/lib/libiphlpapi.a"

Foundation.txt には、.a ファイルを作成する .o ファイルのリストが含まれています。そして、これが私のアプリケーションのコンパイルコマンドです:

g++ -o ./Debug/exe1 @"exe1.txt" -L. -Lc:/poco/lib/  -lPocoFoundationmtd
4

1 に答える 1

0

私は解決策を見つけたようです!マージされた .a ファイル内で .o ファイルと .a ファイル (オブジェクト ファイル + 静的ライブラリ) を混在させていました。ar-x を実行して .a ファイルの内容を抽出した後、すべての .o ファイルを 1 つの最終的な merged.a ライブラリにマージしました。

遅れて申し訳ありません :)

于 2014-09-30T06:13:44.587 に答える