で関数を呼び出そうとすると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 blah.c -o blah -lm
これにより、リンカーに数学ライブラリとリンクするように指示されます。math.h をインクルードすると、sqrt() のような数学関数が存在することをコンパイラに伝えますが、それらは別のライブラリで定義されているため、リンカーは実行可能ファイルにパックする必要があります。
FreeMemory が指摘したように、ライブラリは libm.a と呼ばれます。Unix ライクなシステムでは、ライブラリの命名規則は lib[blah].a です。次に、それらを実行可能ファイルにリンクする場合は、 -l[blah] を使用します。
数学ライブラリを明示的にリンクする必要があります。-lm
リンカーがリンクすることを認識できるように、gcc に渡すフラグに追加します。libm.a