6

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

undefined reference to sqrt

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

gcc -Wall -D_GNU_SOURCE blah.c -o blah

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

4

3 に答える 3

8

gcc を呼び出すときに、コマンドに -lm を追加します:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

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

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

于 2008-09-19T16:24:32.273 に答える
3

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

于 2008-09-19T16:22:11.607 に答える