2012-07-25 18 views
5

私はgccコンパイラとubuntu 12.04 OSを使用しています。私はオブジェクトファイルとprintf関数の定義が含まれているディレクトリの場所を知ることができます。繰り返しますが、プロトタイプを含むヘッダーファイルを探しているのではなく、実際の定義を含むオブジェクトファイルを探しています。printf関数の定義を含むオブジェクトファイルはどこにありますか?

+1

'libc'のその部分です。あなたは何を探していますか?ソースやライブラリ上の定義をマシン上に探しているのと同じですか? –

+0

私はprintfのコード定義を含むlibcのオブジェクトファイルを探しています。 – Ananda

答えて

4

オブジェクトファイルまたはソースファイルをお探しですか?

.oオブジェクトファイルは、ライブラリlibc.soに格納されています。ほとんどのLinuxディストリビューションでは、このファイルは/lib/libc.soにあります。 Ubuntu 11と12では、multiarch supportの一部として、/ libの内容が/lib/i386-linux-gnu/lib/x86_64-linux-gnuに移動されました。

ar x libc.a stdio.o 

これはしかし、非常に便利なように見えるしません:

あなたはx(抜粋)オプションを使用してライブラリを作成するために使用されたar(アーカイブ)コマンドを使用して、個々のオブジェクトファイルを取得することができますが

、私はあなたが実際にオブジェクトファイルではなくソースファイルを望んでいると推測しています。そのためには glibc packageをインストールし、printf.c(これはvfprintfを呼び出すvprintfを呼び出します。これはprintfの実際のコードを含んでいます)。

このソースはbrowsed on Launchpadです。それは非常に複雑で、2000行以上のコードが伸びています。

+0

私はこれに関して3つの具体的な質問があります。(1)arコマンドを使用して、libCに存在するすべてのオブジェクトファイルをリストします。 2.これらのオブジェクトファイルのうち、printfの定義()?あなたがそれを見つけるのに使ったコマンドは何ですか? 3.プログラムで実際に必要な/使用されている定義のみを含めることで、最終実行可能ファイルのサイズを縮小できますか?もしそうなら、いかに。 – Ananda

+0

一口。この宿題ですか? (1)man ar、(2) 'objdump + some options | grep printf'(3)GCCのドキュメントを参照してみてください。 –

0

私は私の最初の二つの質問に正確な答えた - 私たちは、次のコマンドを使用libcの中に存在するすべてのオブジェクトファイル一覧表示するには

  1. を:

    x86_64版システム:$ AR -tは/ usr /をlibに/ x86_64の-のlinux-gnuの/

    libc.aはi386のシステム:$ AR -t /usr/lib/i386-linux-gnu/libc.a

  2. ファイルオブジェクトかを検索するには、printfの楽しさを含み/ usr/lib/x86_64-linux-gnu/usr/lib/i386-linux-gnuまたはディレクトリの下でこのコマンドを実行してください:

    $ nm -o libc.a | grep -w printf

  3. まだ正しい答えを見つけるために取り組んでいます。

+1

ええ、 'nm'は、ライブラリを扱っているときに' objdump'に代わる良い方法です。 –

関連する問題