2012-03-20 14 views
2

以下の簡単なプログラムは何らかの理由でビルドされません。それは "未定義の参照を参照してください"と言いますが、数学モジュールが含まれており、私はそれを-lmフラグで構築しています。 pow(2.0、4.0)のようなpowを使うとビルドされるので、私の型キャストに何か問題があると思われます。ここでANSI-C pow関数と型キャスト

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

int main() { 
    int i; 

    for (i = 0; i < 10; i++) { 
     printf("2 to the power of %d = %f\n", i, pow(2.0, (double)i)); 
    } 

    return EXIT_SUCCESS; 
} 

はbulidログです:

**** Build of configuration Debug for project hello **** 
make all 
Building file: ../src/hello.c 
Invoking: GCC C Compiler 
gcc -O0 -g -pedantic -Wall -c -lm -ansi -MMD -MP -MF"src/hello.d" -MT"src/hello.d" -o "src/hello.o" "../src/hello.c" 
Finished building: ../src/hello.c 

Building target: hello 
Invoking: GCC C Linker 
gcc -o "hello" ./src/hello.o 
./src/hello.o: In function `main': 
/home/my/workspace/hello/Debug/../src/hello.c:19: undefined reference to `pow' 
collect2: ld returned 1 exit status 
make: *** [hello] Error 1 

**** Build Finished **** 

答えて

3

あなたは間違った場所に数学ライブラリを使用するように指示しました - あなたはコンパイル時には、数学ライブラリを指定している(それは勝ったところあなたがリンクしているときに(実際に必要な場所に)それを残しています。リンクするときに指定する必要があります。

gcc -o "hello" ./src/hello.o -lm 
+2

Jerryの言っていることは、リンクフェーズでは渡していないということです。 'Invoking:GCC C Linker'の直後の行を見てください。あなたのMakefileを投稿することはできますか? –

+0

ありがとうK.G.私はGCC Cリンカー設定に-lmパラメーターを追加するのではなく、Eclipseを使用しているので、GCC Cコンパイラー設定に追加しました。リンクフェーズでそれを渡すことで問題が解決されました。 – pocoa

関連する問題