質問: タイトルのように、2点間の距離を求めるために以下のようにプログラムしました。 ``` #include #include #define sqr(n) ((n)*(n)) /*2乗値を求める*/ /*===点の座標を表す構造体===*/ typedef struct { double x; /*X座標*/ double y; /*Y座標*/ } Point; /*---点paと点pbの距離を返す---*/ double distance_of(Point pa,Point pb) { return sqrt(sqr(pa.x-pb.x)+sqr(pa.y-pb.y)); } int main(void) { Point crnt,dest; printf("現在地のX座標: "); scanf("%lf",&crnt.x); printf("現在地のY座標: "); scanf("%lf",&crnt.y); printf("目的地のX座標: "); scanf("%lf",&dest.x); printf("目的地のY座標: "); scanf("%lf",&dest.y); printf("目的地までの距離は%.2fです。\n",distance_of(crnt,dest)); return 0; } ``` ですが、次のようなエラーが出てしまいました。 ``` /tmp/ccvgfvhz.o: 関数 `distance_of' 内: ex1108.c:(.text+0x9c): `sqrt' に対する定義されていない参照です collect2: error: ld returned 1 exit status ``` そもそも、自分は `` に平方根を計算する関数sqrtがあると認識していましたが それは誤認で、sqrt関数を定める必要があるということでしょうか。 だとすれば、sqrt関数はどのように定めればよいでしょうか。
回答: 質問環境がわかりませんが、とりあえずLinux用の`sqrt`のドキュメントには > > `-lm` でリンクする。 > > > と説明されています。他の環境でもだいたい同じでコンパイル(正確にはリンク)時に`-lm`オプションを指定する必要があります。