- ベストアンサー
<math.h>があるのにsqrtが・・・
最初にあるプログラムを作っていたのですが、その祭sqrtでエラーが出てしまったので、別にsqrtを使う短いプログラムを作りました。それが以下のものになります。(test3.c) 「 #include<stdio.h> #include<math.h> int main(void){ int atai; double x=2.0; atai=(int)sqrt(x); printf("atai is %c",atai); } 」 sqrtが動作するか確かめる為のものです。このプログラム(test3.c)で以下のエラーが出てしまいました。 「 /tmp/ccqEejZ1.o(.text+0x4d): In function `main': test3.c: undefined reference to `sqrt' collect2: ld はステータス 1 で終了しました 」 ちなみにLinux(Fedora core 4)を使用しています。 初心者ということもありなぜエラーが出るのか分かりません。 ちなみに<math.h>を使用しないプログラムは普通に動作します。 解決方法をご存知の方がいらっしゃいましたらご教授下さいませ。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コンパイルのオプションつけてないとかないですよね? たとえばTerminalとかだとコンパイル時に 『-lm』とかつけますが
その他の回答 (2)
- toysmith
- ベストアンサー率37% (570/1525)
> collect2: ld はステータス 1 で終了しました このメッセージから、問題点はコンパイル(リンク)時のコマンドの与え方にあることがわかります。 ccでコンパイルしてるなら-lmを直接指定、makeを使ってるならLDFLAGSに-lmを追加ですね。 できれば、ソースだけでなくコンパイル時のコマンドラインも示していただけると具体的なアドバイスがしやすい。 makefileを使ってるならmakefileも。
お礼
ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。
- notnot
- ベストアンサー率47% (4901/10362)
printfやgetcharのようなどのプログラムでも使われるような標準的な関数は何も指定しなくていいのですが、算術関数は、どのプログラムでも使うわけじゃないし、関数サイズが大きいため、libmという別ファイルに入ってます。 コンパイルの次のリンクという作業で、sqrt() や sin()等のサブルーチンが入っているlibmから取ってくるために、cc コマンドに -lm (linkの時にlibmも探しなさい)というオプションをつける必要があります。
お礼
ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。
お礼
ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。