14

libPixel.aに依存する *libRGB.*a に依存するlibColor.aという 3 つのC静的ライブラリがあるとします。ライブラリlibColor.aは、ライブラリlibRGB.aに依存していると言えます。libColor.a には、 libRGB.aで定義されたシンボルのいくつかへの参照がいくつかあるためです上記のすべてのライブラリを独立した新しいlibNewColor.aに結合するにはどうすればよいですか?

独立とは、新しいライブラリにすべてのシンボルが定義されている必要があることを意味します。したがって、リンク中に-lNewColorを指定するだけです。新しいライブラリのサイズは最小限に抑える必要があります。つまり、 libRGB.a にlibColor.aなどで使用されていないシンボルを含めないでください。arコマンド (静的ライブラリ/アーカイブの作成と更新に使用)でさまざまなオプションを使用して、運試しをしました。 )。

4

3 に答える 3

12

1 /(を使用して)各ライブラリからすべてのオブジェクトファイルを抽出しar、ライブラリまたはオブジェクトファイルなしでコードをコンパイルしてみます。おそらく、未定義のシンボルの絶対的なバケットロードが発生します。未定義のシンボルがない場合は、手順5に進みます。

2 /最初のものを取得し、(を使用してnm)そのシンボルを満たすオブジェクトファイルを見つけます。

3 /そのオブジェクトファイルを書き留めてから、新しいオブジェクトファイルを含むコードをコンパイルします。未定義のシンボルの新しいリストが表示されます。シンボルがない場合は、手順5に進みます。

4/ステップ2に進みます。

5 /リスト内のすべてのオブジェクトファイル(存在する場合)を1つのライブラリに結合します(ここでもar)。

バン!そこにあります。オブジェクトを使用せずに、新しいライブラリを使用してコードをリンクしてみてください

このすべては、シェルスクリプトを使用して比較的簡単に自動化できます。

于 2009-03-20T11:47:02.027 に答える
5

静的ライブラリは、一部のオブジェクトファイル(.o)のアーカイブにすぎません。実行できることは、2つのライブラリ内のすべてのオブジェクトを(「arx」を使用して)抽出してから、「ar」を使用して新しいライブラリでそれらをリンクすることです。

于 2009-03-20T11:41:59.167 に答える