5

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

4

2 に答える 2

4

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

.oオブジェクトファイルはライブラリ内に保存されますlibc.so。ほとんどのLinuxディストリビューションでは、このファイルはにあります/lib/libc.so。Ubuntu 11および12では、マルチアーチサポートの一部として、 /libの内容がとに移動されまし/lib/i386-linux-gnu/lib/x86_64-linux-gnu

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

ar x libc.a stdio.o 

ただし、これはあまり役に立たないように思われるので、オブジェクトファイルではなくソースファイルが実際に必要だと思います。そのためには、printf.c(printfの実際のコードを含むvfprintfを呼び出すvprintfを呼び出す)を含む glibcパッケージをインストールします。

このソースはLaunchpadで閲覧できます。これはかなり複雑で、2000行をはるかに超えるコードになります。

于 2012-07-25T16:35:09.697 に答える
1

私の最初の2つの質問に対する正確な答えを見つけました -

  1. libc に存在するすべてのオブジェクト ファイルを一覧表示するには、次のコマンドを使用します。

    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. 正しい答えを見つけるためにまだ取り組んでいます。

于 2012-07-26T12:43:58.330 に答える