- ベストアンサー
math.h
C言語で以下のプログラムを打ちました #include <stdio.h> #include <math.h> main(){ printf("%f\n",sin(23.5)); } そして。下記の用に実行すると以下のようにエラーがでます。エラーからするにサイン関数が見つからない用な事いっているのですが、一体なん何んでしょう? ちなみに。OSはRed hut Linux 7.3です. % gcc -o sample sample.c /tmp/ccwod1zy.o: In function `main': /tmp/ccwod1zy.o(.text+0x17): undefined reference to `sin' collect2: ld returned 1 exit status
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コンパイルのあと、ldでlinkしようとしたら(標準ライブラリーに)sin関数が無かった と言うことだと思います。 gcc -o hoge hoge.c -lm と言った具合に、-lm でlibm をライブラリ指定すれば解決できるかと思います。
その他の回答 (2)
- yosi_yosi
- ベストアンサー率35% (165/468)
すでに回答は出ていますが、ちょっと1点だけ突っ込みを... sin(23.5) としていますが、この23.5は23.5°ですか? sin関数に渡す引数はラジアンですよ。 23.5°のsinの値を求めるのならば、sin(23.5/180.*3.141592654)などで変換が必要です。
- liar_adan
- ベストアンサー率48% (730/1515)
対処法は#1さんの通りでいいと思います。 意外に思われるかもしれませんが、 「ヘッダファイルをincludeする」 ことと、 「必要なライブラリーをリンクする」 こととは、関係がないのです。 たとえばstdio.hファイルをincludeしてもしなくても、 stdio.hに入っている関数はリンクされます(使えます)。 ただし文法的にプロトタイプ宣言などが必要になるので、 includeをしないとまずいわけです。 おおかたの関数は何も指定しなくてもリンクされますが、 数学関係の関数だけ自動的にリンクしてくれない場合があります。 その際手作業でリンクを指定してやります。
お礼
楽にコンパイルできました。 初めてmathのヘッダーファイルを使用したので、stdioヘッダーと同様ないいのだと思ってました。これからいろいろ勉強しますw