2016-04-18 10 views
0

私が使用して静的ライブラリを作成し、そこからいくつか生成されたオブジェクトファイルを、持っている:どうすればar -sが正しく動作するのでしょうか?

ar -r libmine.a *.o 

その後私は、インデックスを通じ追加している:

ar -s libmine.a 

は、どのように2つ目のコマンドで最初のコマンドを比較することができますし、どのような追加機能が私にそのインデックスを与えるのですか?

使用した後、このコマンド:

ar -r libmine.a *.o 

私はこれを使用:

nm -s libmine.a 

をし、私が取得:

Archive index: 
add in add.o 
mul in mul.o 
sub in sub.o 
add.o: 
0000000000000000 T add 
mul.o: 
0000000000000000 T mul 
sub.o: 
0000000000000000 T sub 

私が行う次のステップar -s libmine.anm -s libmine.a後、私は同じ取得出力。どうして? ar -rar -sとなりますか?

+1

なぜアーカイブファイルに.cファイルを追加していますか? – fluter

+0

私の悪い。私はオブジェクトファイルを意味します、それは間違いでした。 – Ice

+0

質問を編集して新しい質問をしましたか? – Leandros

答えて

1

インデックス付きのアーカイブは、ライブラリへのリンクを高速化し、ライブラリ内のルーチンがアーカイブ内の配置に関係なく互いに呼び出すことを可能にします。

nm -sまたはnm --print-armapを使用してインデックステーブルを一覧表示できます。

ああ、ライブラリを作成するコマンドはar -r <lib.a> <objects>です。オブジェクトとライブラリ名が混在しています。

あなたの「継続」について詳しく説明します:arがアーカイブを変更すると、arは自動的にインデックステーブルを更新して更新します。最新の実装であるarは、最初にアーカイブを作成するときに、ar -sを呼び出すことなく、自動的にそのようなインデックスを作成します。

関連する問題