Math.h で関数を呼び出すときにリンク エラーが発生するのはなぜですか?
質問
関数を呼び出そうとしたとき 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] を使用します。
所属していません StackOverflow