sinについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サイクロン
記事: 6
登録日時: 12年前

sinについて

#1

投稿記事 by サイクロン » 12年前

コード:

#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 オプションをつけています。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: sinについて

#2

投稿記事 by h2so5 » 12年前

sin(10) = -0.544021 で合っていますよ。

サイクロン
記事: 6
登録日時: 12年前

Re: sinについて

#3

投稿記事 by サイクロン » 12年前

そうですね。
sin(10)は-0.544021であっていました。
勘違いしていました。すいません。
それでは、なぜ下のコードは正しくて、上のコードはコンパイルが通らないのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: sinについて

#4

投稿記事 by h2so5 » 12年前

実は両方ともコンパイルは通っていますよ。
でも上は数学関数用のライブラリを指定していないので関数が見つからずリンクに失敗しています。

数学関数を利用するときは-lmの指定が必要です。

サイクロン
記事: 6
登録日時: 12年前

Re: sinについて

#5

投稿記事 by サイクロン » 12年前

-lmコマンドはつけているのですがそれでも、このコンパイルエラーが出てしまいます。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: sinについて

#6

投稿記事 by h2so5 » 12年前

もしかして、

コード:

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

コード:

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

サイクロン
記事: 6
登録日時: 12年前

Re: sinについて

#7

投稿記事 by サイクロン » 12年前

出来ました。
まさか後ろに持ってくるとは思いつきませんでした。
h2so5さん、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る