9

明らかな何かが欠けているかどうかはわかりませんが、Cで変数の平方根を計算できないようです。sqrt() 関数は定数に対してのみ機能するようです。これは私のコードです:

#include <math.h>
#include <stdio.h>

int main()
{
    double a = 2.0;
    double b = sqrt(a);
    printf("%f", b);
    return 0;
}

このプログラムを実行すると、次のエラーが表示されます。

gcc -Wall -o "test2" "test2.c" (in directory: /home/eddy/Code/euler)
/tmp/ccVfxkNh.o: In function `main':
test2.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Compilation failed.

ただし、sqrt() の引数を ( ) などの 2.0 などの定数に置き換えると、b = sqrt(2.0)正常に動作します。sqrt() は変数などで動作しないはずですか?

助けてくれてありがとう

4

7 に答える 7

21

数学ライブラリとリンクする必要があります (コマンド ラインで「-lm」を使用します)。一定の場合、コンパイラはおそらくスマートで sqrt(2.0) を事前計算しています (したがって、コンパイルされるコードは本質的に 'b = 1.414...;' です)。

于 2010-08-20T18:08:27.967 に答える
3

gcc の場合、ライブラリをリンクする必要があります。

gcc ファイル名.c -lm .

ただし、g++ の場合、ライブラリをリンクする必要がないため、これで問題なく動作します。

g++ filename.c -o filename コンパイルが成功したら。

実行するには、G++ で ./filename と入力するだけです。Gcc で ./a.out と入力します。

于 2014-06-03T05:51:18.450 に答える
2

gcc -Wall -o "test2" "test2.c" -lmこれを修正する可能性が高いコマンドを使用してください。

これには、標準の C ランタイム ライブラリに加えて、数学ライブラリが含まれます。ほとんどのシステムでは、数学ライブラリは歴史的に、明示的に要求する必要がある別のエンティティです。

于 2010-08-20T18:08:54.593 に答える
1

コンパイル:

gcc -Wall -o test2 test2.c -lm

数学ライブラリに対してリンクする必要があります。

于 2010-08-20T18:09:14.050 に答える
1

" " 演算子を使用して数学ライブラリを含める

#include " math.h "

-lm数学ライブラリを継承するためのオプションを使用してプログラムをコンパイルします私たちのプログラム名がtest.c次のようにコンパイルすると仮定します

gcc test.c -lm
于 2012-04-13T13:45:12.877 に答える
1

デフォルトでは、gcc は標準ライブラリをリンクしません。したがって、gcc 経由でコンパイルする場合は、次のようにする必要があります。

gcc ファイル名.c -lm .

ただし、g++ の場合、ライブラリをリンクする必要がないため、これで問題なく動作します。

g++ ファイル名.c -o ファイル名

于 2014-05-30T11:32:28.717 に答える
0

これは私にとってはうまくいきます。数学ライブラリに問題があると思います。もう一度リンクしてみてください。他の賢明なコードは完全に完璧です。

于 2011-10-21T07:02:20.867 に答える