4

数学をコードに適切にリンクするために -lm と入力する必要がある理由がわかりませんが、stdio については同じことをする必要はありません。私は C を使い始めたばかりなので、これがばかげた質問であったり、明らかな何かが欠けている場合は申し訳ありません。

4

2 に答える 2

6

要するに、歴史的な理由から、

の関数はstdio.hlibcあり、 の関数math.hは にありlibmます。libcはデフォルトでリンクされていますが、libmそうではありません。

于 2013-08-05T06:25:31.247 に答える
3

2 つの異なる点があります。

  • ヘッダー ファイル (stdio.hおよびmath.h) - 関数プロトタイプといくつかの定義とデータのみが含まれます。それらはソースコード#includedです
  • ライブラリ ( libm.so) -アプリケーションにリンクされるバイナリコード (バイナリ コード) が含まれています。また、リンカー フラグという名前のライブラリの場合、フラグは-です。libname.so-lnamelibm.so-lm

アプリケーションに常にリンクされているlibc.soとがあることも考慮してください。およびその他libstdc.soの関数のコードは、これらのライブラリに含まれているため、常に含まれています。stdio.hstdlib.h

PS: ここでは Linux/UNIX を想定しているため、名前は非常に具体的です。.soWindows でも同様ですが、名前が異なります (ファイルではなく DLLなど)。

于 2013-08-05T06:23:51.533 に答える