ページ 1 / 1
sinについて
Posted: 2014年1月21日(火) 19:56
by サイクロン
コード:
#include <stdio.h>
#include <math.h>
int main(void)
{
double a;
double b;
b = 10.0;
a = sin(b);
printf("%f\n", a);
return 0;
}
このプログラムをコンパイルしようとすると
/tmp/ccT2ZzyT.o: 関数 `main' 内:
test.c:(.text+0x24): `sin' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
というエラーが出てしまいます。
そして、
コード:
#include <stdio.h>
#include <math.h>
int main(void)
{
printf("%f\n", sin(10));
return 0;
}
だと、コンパイルは通るのですが、
-0.544021
と表示されます。
なぜこのようなことになるのでしょうか?
環境はlinux で gcc-4.8.1を使って -lm オプションをつけています。
Re: sinについて
Posted: 2014年1月21日(火) 20:01
by h2so5
sin(10) = -0.544021 で合っていますよ。
Re: sinについて
Posted: 2014年1月21日(火) 20:05
by サイクロン
そうですね。
sin(10)は-0.544021であっていました。
勘違いしていました。すいません。
それでは、なぜ下のコードは正しくて、上のコードはコンパイルが通らないのでしょうか?
Re: sinについて
Posted: 2014年1月21日(火) 20:10
by h2so5
実は両方ともコンパイルは通っていますよ。
でも上は数学関数用のライブラリを指定していないので関数が見つからずリンクに失敗しています。
数学関数を利用するときは-lmの指定が必要です。
Re: sinについて
Posted: 2014年1月21日(火) 20:13
by サイクロン
-lmコマンドはつけているのですがそれでも、このコンパイルエラーが出てしまいます。
Re: sinについて
Posted: 2014年1月21日(火) 20:19
by h2so5
もしかして、
のように -lm を前に持ってきていませんか?
僕の環境ではこのコマンドで正常にリンクできます。
Re: sinについて
Posted: 2014年1月21日(火) 20:21
by サイクロン
出来ました。
まさか後ろに持ってくるとは思いつきませんでした。
h2so5さん、ありがとうございました。