3

abs()、coutストリーム、printfなどのすべての関数/定義を含む標準Cライブラリについて疑問に思っていました。

私はヘッダーファイル(stdio.h、cmath.h、time.hなど)に精通していますが、対応する.libまたは.dllがどこにも存在しないようです(つまり、stdio.lib、time.dll)。 、など)。

これらのヘッダーファイルの関数の実際のコードはどこにありますか?私は何かを誤解していますか?すべての標準化されたものを含む1つの巨大なlibファイル、またはヘッダーごとに1つのようなものはありますか?

助けていただければ幸いです!!

ありがとう!

4

5 に答える 5

4

実装によって異なります。Windowsでは、標準ライブラリ機能はCおよびC++ランタイムライブラリにあります。Cランタイムライブラリは常に自動的にリンクされます。標準ライブラリヘッダーの1つを含めると、C++ランタイムライブラリは自動的にリンクされます。

于 2010-07-08T04:46:48.733 に答える
3

Linux / UNIX / AIXの一部のバリアントを使用している場合は、lddを使用してみてください。Linuxプロンプトのldd`whichls`で何か新しいタイプを試す楽しみのためだけに。これが私が得たものです:

librt.so.1 => /lib/tls/librt.so.1 (0x0084c000)
libacl.so.1 => /lib/libacl.so.1 (0x40022000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00289000)
libc.so.6 => /lib/tls/libc.so.6 (0x00a0b000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c57000)
/lib/ld-linux.so.2 (0x009ec000)
libattr.so.1 => /lib/libattr.so.1 (0x40028000)

パスは、共有ライブラリから取得されている場所を示している必要があります。Windowsを使用している場合は、depends.exehttp://www.dependencywalker.comを入手してください-優れたツール

于 2010-07-08T04:58:48.967 に答える
2

通常、CまたはC ++ランタイムライブラリを明示的にリンクする必要はありません。通常、コンパイラは、適切なオプションを使用してリンカを呼び出し、それを実行します。

実際、gccでは、デフォルトのライブラリを含めない-nodefaultlibsようにする必要があります( 、、 -nostdlibまたはを使用するなど-nostartfiles)。

単一のファイルにあるかどうかを含め、標準ライブラリの実際の場所は実装の問題です。

于 2010-07-08T04:46:59.607 に答える
1

Arpanが述べたように、ldd('binutils'パッケージに含まれています)を使用して、libcに実際に使用されているSOファイルを見つけることができます。Linuxシステムでの最も一般的な実装は、通常glibcと呼ばれるGNUCライブラリです。

于 2010-07-08T07:54:52.743 に答える
0

DLLについて言えば、Windowsを使用していると思います。この場合、通常、コンパイラに付属している「ランタイム」DLLが1つあります。Visual C ++では、名前はmsvcrt.dllなどだと思います。

于 2010-07-08T04:46:56.997 に答える