- ベストアンサー
Makefile と <math.h>
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でインクルードしていますが,これは違いますか? 長文を読んで下さってありがとうございます,「ココおかしい」などの指摘お待ちしています;;
- みんなの回答 (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 のように付けてください。
その他の回答 (2)
- phoenix343
- ベストアンサー率15% (296/1946)
gccはldがエラーを返したってことでソースは問題ありません。必要なライブラリが指定されていないのだと思います。lib*.aというたぐいの。 sqrtの実体があるライブラリを指定しましょう。
お礼
わかりました! ありがとうございます.
- Werner
- ベストアンサー率53% (395/735)
-lmはリンク時に付けてください。
お礼
やってみたらコンパイルできました! ありがとうございます.
お礼
なるほど,そこにつけるんですか. やってみたら見事コンパイルできました. ありがとうございます^^