ページ 11

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
もしかして、

コード:

$ gcc -lm test.c
のように -lm を前に持ってきていませんか?

コード:

$ gcc test.c -lm
僕の環境ではこのコマンドで正常にリンクできます。

Re: sinについて

Posted: 2014年1月21日(火) 20:21
by サイクロン
出来ました。
まさか後ろに持ってくるとは思いつきませんでした。
h2so5さん、ありがとうございました。