Math.h で関数を呼び出すときにリンク エラーが発生するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/103407

  •  01-07-2019
  •  | 
  •  

質問

関数を呼び出そうとしたとき math.h, 次のようなリンクエラーが発生します。

undefined reference to sqrt

でも、私はやっています #include <math.h>
gcc を使用し、次のようにコンパイルしています。

gcc -Wall -D_GNU_SOURCE blah.c -o blah

リンカが定義を見つけられないのはなぜですか sqrt?

役に立ちましたか?

解決

gcc を呼び出すときにコマンドに -lm を追加します。
gcc -Wall -D_GNU_SOURCE なんとか.c -o なんとか -lm

これにより、リンカーに数学ライブラリとリンクするように指示されます。math.h をインクルードすると、sqrt() のような数学関数が存在することをコンパイラーに伝えますが、それらは別のライブラリーで定義されており、リンカーは実行可能ファイルにパックする必要があります。

FreeMemory が指摘したように、ライブラリは libm.a と呼ばれます。Unix 系システムでは、ライブラリの命名規則は lib[blah].a です。次に、それらを実行可能ファイルにリンクしたい場合は、 -l[blah] を使用します。

他のヒント

数学ライブラリを明示的にリンクする必要があります。追加 -lm リンカーがリンクすることを認識できるように、gcc に渡すフラグに追加します。 libm.a

追加 -lm gcc コマンドの最後に追加して数学ライブラリをリンクします。

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

正しくリンクするには、コンパイラ フラグの順序が重要です。具体的には、 -lm 置かれるべきです 行の最後に.

なぜなのか疑問に思っているなら、 math.h C でコンパイルする場合はライブラリを含める必要があります。この説明を確認してください。 ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top