1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】math.hを含むにもかかわらず、C言語でpow( )への未定義参照【重複あり

2022-01-11 02:01:18

質問

与えられた半径から球の体積を計算する関数を実装したい。 pow() .

以下のようなコードです。

#include <math.h>

#define PI 3.14159265 //defines the value of PI

/* Declare the functions */
double volumeFromRadius(double radius);

/* Calculate the volume of a sphere from a given radius */
double volumeFromRadius(double radius) {
    return (4.0/3.0) * PI * pow(radius,3.0f);
}

コマンドで実行すると gcc -o sphere sphere.c というエラーが表示されます。

undefined reference to 'pow' collect2: error: ld returned 1 exit status

これは、ユニのWindowsマシンのcode::blocksでコンパイルしてうまく実行できますが、自宅のFedora 17では、コマンドラインコンパイラが実行するのを拒否します。どんな考えでも、ありがたく頂戴します。

解決方法は?

mathライブラリとリンクする必要があります。

gcc -o sphere sphere.c -lm

表示されているエラー error: ld returned 1 exit status はリンカーから ld (オブジェクトファイルを結合する gcc の一部) は、関数 pow が定義されています。

含む math.h は、様々な関数の宣言をもたらし、その定義はもたらさない。defは、数学ライブラリに存在する libm.a . pow()のような関数の呼び出しが解決されるように、プログラムをこのライブラリとリンクさせる必要があります。