🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

9254閲覧

c言語で<math.h>が使えません。

emilio

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/10/11 10:42

前提・実現したいこと

学校の課題に取り組んでいます。
<math.h>を読み込んで関数を使おうとしたところ以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

report5_3.c:(.text+0x21): undefined reference to `sqrt' report5_3.c:(.text+0x34): undefined reference to `log10'

該当のソースコード

c言語

1#include<stdio.h> 2#include<math.h> 3 4int main(){ 5 int x,i,sq; 6 float sq_rt,log; 7 8 for(i=1;i<11;i++){ 9 sq=i*i; 10 sq_rt=sqrt(i); 11 log=log10(i); 12 printf("%d %f %f\n", sq, sq_rt, log); 13 } 14 return 0; 15} 16

試したこと

gcc -lm report5_3.c でコンパイルしてみても上記のエラーが出ました。

補足情報(FW/ツールのバージョンなど)

Windows10でWSLを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

数学関数はデフォルトで探されるライブラリ(libc)に入っていません。
gcc ~~ -lmと、libmを使うようにコマンドを書いてください。

gcc -lm report5_3.c でコンパイルしてみても上記のエラーが出ました。

-lmは後ろに書いてください。
・・・と思ったけど、gccのバージョンによっては前に書いても行けるようです。

投稿2019/10/11 11:00

編集2019/10/11 11:12
otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nomuken

2019/10/11 11:07

補足すると、試したことに書いてある > gcc -lm report5_3.c ではなく gcc report5_3.c -lm である必要があります。 参照する側を先、参照される側を後に指定します。
emilio

2019/10/11 14:51

ありがとうございます! 無事実行できました!
otn

2019/10/11 15:37

少なくとも gcc 4.4.7 だと -lm が前でもOKなんですが、いつからどういう変更があったのか??
otn

2019/10/12 07:20

なるほど。バージョンの違いではなく、ビルドの際のオプションですか。 ありがとうございます。
guest

0

floatを引数の取るのは関数名が違います。

c

1usr ~/Project/test % ./a.out 21 1.000000 0.000000 34 1.414214 0.301030 49 1.732051 0.477121 516 2.000000 0.602060 625 2.236068 0.698970 736 2.449490 0.778151 849 2.645751 0.845098 964 2.828427 0.903090 1081 3.000000 0.954243 11100 3.162278 1.000000 12usr ~/Project/test % cat t1.c 13#include<stdio.h> 14#include<math.h> 15 16int main(){ 17 int x,i,sq; 18 float sq_rt,log; 19 20 for(i=1;i<11;i++){ 21 sq=i*i; 22 sq_rt=sqrtf((float)i); 23 log=log10f((float)i); 24 printf("%d %f %f\n", sq, sq_rt, log); 25 } 26 return 0; 27}

C言語関数辞典

投稿2019/10/11 11:01

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

emilio

2019/10/11 14:58

回答ありがとうございます! 勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問