冬物クリーニング最大49%OFFはコチラ

最初にあるプログラムを作っていたのですが、その祭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>を使用しないプログラムは普通に動作します。
解決方法をご存知の方がいらっしゃいましたらご教授下さいませ。
よろしくお願いします。

教えて!goo グレード

A 回答 (3件)

コンパイルのオプションつけてないとかないですよね?


たとえばTerminalとかだとコンパイル時に 『-lm』とかつけますが
    • good
    • 7
この回答へのお礼

ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。

お礼日時:2005/11/21 17:29

> collect2: ld はステータス 1 で終了しました


このメッセージから、問題点はコンパイル(リンク)時のコマンドの与え方にあることがわかります。

ccでコンパイルしてるなら-lmを直接指定、makeを使ってるならLDFLAGSに-lmを追加ですね。
できれば、ソースだけでなくコンパイル時のコマンドラインも示していただけると具体的なアドバイスがしやすい。
makefileを使ってるならmakefileも。
    • good
    • 4
この回答へのお礼

ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。

お礼日時:2005/11/21 17:28

printfやgetcharのようなどのプログラムでも使われるような標準的な関数は何も指定しなくていいのですが、算術関数は、どのプログラムでも使うわけじゃないし、関数サイズが大きいため、libmという別ファイルに入ってます。


コンパイルの次のリンクという作業で、sqrt() や sin()等のサブルーチンが入っているlibmから取ってくるために、cc コマンドに -lm (linkの時にlibmも探しなさい)というオプションをつける必要があります。
    • good
    • 4
この回答へのお礼

ありがとうございました。皆様のご指摘どおり、コンパイル時に-lmをつけるのを忘れておりました。

お礼日時:2005/11/21 17:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング