gcc コンパイラと ubuntu 12.04 OS を使用しています。printf関数の定義を含むオブジェクトファイルがどこにあり、どのディレクトリの下にあるかを知りたいです。ここでも、プロトタイプを含むヘッダー ファイルではなく、実際の定義を含むオブジェクト ファイルを探しています。
2 に答える
オブジェクトファイルまたはソースファイルをお探しですか?
.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行をはるかに超えるコードになります。
私の最初の2つの質問に対する正確な答えを見つけました -
libc に存在するすべてのオブジェクト ファイルを一覧表示するには、次のコマンドを使用します。
x86_64 システム: $ ar -t /usr/lib/x86_64-linux-gnu/libc.a
i386 システム: $ ar -t /usr/lib/i386-linux-gnu/libc.a
どのオブジェクト ファイルに printf 関数が含まれているかを調べるには、/usr/lib/x86_64-linux-gnu /usr/lib/i386-linux-gnu またはディレクトリの下で次のコマンドを実行します。
$ nm -o libc.a | grep -w printf
正しい答えを見つけるためにまだ取り組んでいます。