2012-01-25 12 views

答えて

9

シンボルを削除しなかった場合は、nmを使用してオブジェクトファイルの名前(.o)を表示できます。

$ nm foo.a 
foo.a(objectFile1.o): 
0000000000000000 T _function1 
foo.a(objectFile2.o): 
0000000000000000 T _function2 

この出力は、オペレーティングシステムによって異なります。例えば、ここではUbuntuシステム上libz.a内のシンボルの出力は次のとおりです。

$ nm libz.a | grep ".o:" 
adler32.o: 
compress.o: 
crc32.o: 
gzio.o: 
uncompr.o: 
deflate.o: 
trees.o: 
zutil.o: 
inflate.o: 
infback.o: 
inftrees.o: 
inffast.o: 

上記12個の.oファイルのそれぞれは、GCCに-cオプションでコンパイル元のコード内の翻訳単位でした。私はgrepを使用して、オブジェクトファイルのそれぞれで定義され参照されている無数のシンボルを無視しました。コンパイル後、これらのオブジェクトファイルは、arという静的ライブラリに結合されました。

arもオブジェクトファイルを抽出できます。同じlibz.aに:

$ ar xv libz.a 
x - adler32.o 
x - compress.o 
x - crc32.o 
x - gzio.o 
x - uncompr.o 
x - deflate.o 
x - trees.o 
x - zutil.o 
x - inflate.o 
x - infback.o 
x - inftrees.o 
x - inffast.o 

xオプションは、抽出のためであり、vは、それが抽出されるように、オブジェクト・ファイルの名前を印刷している、冗長です。

+0

このリストには、ファイル内で使用されているすべてのオブジェクトも一覧表示されます。 .aの中のファイルだけを出力するコマンドは何ですか?たとえば、.aファイルは.aファイル内にあります。 – Abhinav

+0

これは、正確に 'nm'があなたに伝えるものです。例えば、私のUbuntuマシンでは: 'nm /usr/lib/libz.a | grep ".o:" 'は' libz.a'を構成する12個の '.o'ファイルを返します。これはあなたが意味することですか? – greg

+0

はい、そうです。しかし、nm my.aを使う| grep ".o:"私のメソッドは、.oファイルの中のいくつかを呼び出しますが、すべての.oファイルはリストしません。私はここで何か間違っていますか? – Abhinav

0

これは次のコマンドで動作します。 nm <> | grep ".o" | (// g "| sed" s /)。 // g "| sed" s /。 manページから、uniqの

2

私は(アーカイブを操作する)それが意味何のためにarを使用する方が簡単だと思う

ar t foo.a 

指定されたファイルの一覧を表示-tためにでそれらはアーカイブに表示され、それぞれ別の行に表示されます。ファイルが指定されていない場合、アーカイブ内のすべてのファイルが一覧表示されます。

man 1 ar詳細については、

関連する問題