アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語初心者です,Vine Linuxを使用しています.
Makefileを用いたコンパイルをしたいのですが,あるcコード中にある,「sqrt」でコンパイラからエラー警告が出ます.

エラーコード:
gcc -o p001 pMain001.o pIo001.o pFnc001.o
pFnc001.o(.text+0x214): In function 'sqr_Rt':
: undefined reference to 'sqrt'
collect2: ld はステータス 1 で終了しました
make: *** [p001] エラー 1

Makefile:
#Makefile for p001
CC = gcc
p001: pMain001.o pIo001.o pFnc001.c
$(CC) -o p001 pMain001.o pIo001.o pFnc001.o
pMain001.o: pMain001.c pIo001.c p001.h
$(CC) -c pMain001.c pIo001.c
pIo001.o: pIo001.c p001.h
$(CC) -lm pIo001.o pIo001.c
pFnc001.o: pFnc001.c p001.h
$(CC) -c p001.o pFnc001.c

プログラムの概要:
p001.hには,構造体定義と関数プロトタイプ宣言.
pIo001.cには,キーからの入力と,出力の関数.
pFnc001.cにはp001.hにある定義を用いた関数があり,この中にsqrtを使う関数がある.
pMain001.cではpIo001.cとpFnc001.cにある関数を利用し,入出力を行う.

Makefileの記述が間違っているような気がしてならないんですが,何せ勉強不足なものでよくわかりません.
<math.h>はp001.hでインクルードしていますが,これは違いますか?
長文を読んで下さってありがとうございます,「ココおかしい」などの指摘お待ちしています;;

A 回答 (3件)

#1さんの回答のとおりです。



> $(CC) -lm pIo001.o pIo001.c

-lm オプションは、ここではなく

> $(CC) -o p001 pMain001.o pIo001.o pFnc001.o
この行に、
$(CC) -lm -o p001 pMain001.o pIo001.o pFnc001.o
のように付けてください。
    • good
    • 0
この回答へのお礼

なるほど,そこにつけるんですか.

やってみたら見事コンパイルできました.
ありがとうございます^^

お礼日時:2008/05/31 22:40

gccはldがエラーを返したってことでソースは問題ありません。

必要なライブラリが指定されていないのだと思います。lib*.aというたぐいの。
sqrtの実体があるライブラリを指定しましょう。
    • good
    • 0
この回答へのお礼

わかりました!
ありがとうございます.

お礼日時:2008/05/31 22:39

-lmはリンク時に付けてください。

    • good
    • 0
この回答へのお礼

やってみたらコンパイルできました!
ありがとうございます.

お礼日時:2008/05/31 22:38

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