Linuxの下のC言語pow()関数が引き出す問題
gcc test.c //
gcc test.c -lm //
With all recent versions of GCC, when you use the math library
you have to explicitly link to it (it is not automatically linked
to along with the rest of the standard C library).If you are
compiling on the command-line with the gcc or g++ command, you
would accomplish this by putting -lm at the end of the command.
For example: gcc -o foo foo.c -lm
Linuxの下のC言語pow()関数から引き出された問題本文はRickyが2015年09月08日に発表した.
今日はLinuxでmathを使いました.hライブラリのpow()関数は、gccコンパイル時にエラーを報告して返します:‘pow’の未定義の参照に対して資料を調べて、gccコンパイル時に-lmパラメータを加えて正常にコンパイルする必要があります.これはなぜですか.資料をもう一度調べました.
mathを使用します.hで宣言するライブラリ関数には、数学関数がlibmにあるため、gccコマンドラインに-lmオプションを追加する必要があります.soライブラリファイル(これらのライブラリファイルは通常/libディレクトリの下にある)では、-lmオプションはコンパイラに、私たちのプログラムで使用している数学関数をこのライブラリファイルに探していることを伝えます.本書で使用するライブラリ関数の大部分(printfなど)はlibcにある.soライブラリファイルではlibcを使用する.soのライブラリ関数はコンパイル時に-lcオプションを追加する必要はありません.もちろん追加しても間違いありません.このオプションはgccのデフォルトオプションですから.
C標準は主に2つの部分から構成され、一部はCの構文を記述し、もう一部はC標準ライブラリを記述する.C標準ライブラリは、関連する関数、変数、タイプ宣言、マクロ定義を含む標準ヘッダファイルのセットを定義します.一つのプラットフォームでC言語をサポートするには、Cコンパイラだけでなく、C標準ライブラリも実現しなければならない.このような実現こそ、C標準に合致する.C規格に適合しない実装も存在する.例えば、多くのシングルチップマシンのC言語開発ツールでは、Cコンパイラのみで完全なC規格ライブラリがない.
Linuxプラットフォームで最も広く使用されているC関数ライブラリはglibcであり、C標準ライブラリの実装が含まれている.ほとんどのCプログラムはglibcのライブラリ関数を呼び出すので、glibcはLinuxプラットフォームCプログラムの実行の基礎です.glibcはヘッダファイルとライブラリファイルのセットを提供し、最も基本的で、最もよく使われるC標準ライブラリ関数とシステム関数はlibc.soライブラリファイルでは、ほとんどのCプログラムの実行がlibcに依存する.so,数学計算を行うCプログラムの中にはlibmに依存するものもある.so,後でマルチスレッドのCプログラムがlibpthreadに依存することも見られる.so.後でlibcと言った時libcを指す.soというライブラリファイルですが、glibcとはglibcが提供するすべてのライブラリファイルを指します.
転載:http://www.rickyhao.com/index.php/archives/64/