2016-04-27 8 views
1

私はプログラムの中でユーザー定義関数を作成しています。 pow関数は、コンパイラは私にエラーを与え、undefined reference to pow()があると言います。私はこれに似た問題を見てきました。コンパイル時に-lmを追加するという解決策がありました。私はこれをやったが、まだそれはまだ問題がある。私のコードのmain関数にpowを入れるだけで以前はうまくいきましたので、私のユーザ定義関数でのみ発生しました。指数が0.5の代わりに2の場合にも機能します。助けていただきありがとうございます。私のコードをコンパイルしようとすると、 '-lm'とリンクしていても '未定義の参照(pow()')というエラーが表示されます

#include<math.h> 

float standard_deviation (float variance) { 

     float deviation = 0.0; 
     deviation = pow(variance, 0.5); 

     return deviation; 
} /* mean */ 


float standard_error (float standard_deviation, int number_of_elements) { 

    return standard_deviation/pow(number_of_elements, 0.5); 

} /* mean */ 
+5

どのようにプログラムをビルドしますか?コマンドラインから?コマンドラインで '-lm'をどこに置いたのですか?順序が重要なので、ライブラリはソース/オブジェクトファイルの後にある必要があります。 –

+2

コンパイルとリンクに使用する(個々の)コマンドを表示します。さらに、この問題を示す完全なスタンドアロンの例を作成してください。 – Evert

+2

@スティーブンカーライルあなたはコンパイラですか? – shafeeq

答えて

0

あなたがfloat代わりのdoubleを使用しているので、あなたはpowfを使用する必要があります。

deviation = powf(variance, 0.5f); 
return standard_deviation/powf((float)number_of_elements, 0.5f); 

-lmでコンパイルします。

+0

私はpowfに変更しようとしましたが、それではpowfへの未定義の参照があると言いました –

+0

@StevenCarlisleは '-lm'でコンパイルしましたか? –

+0

big_statistics_funtion:big_statistics_function.c gcc -o big_statistics_funtion big_statistics_function.c -lm 私は-lmを持っています。あなたが意味するものなのかどうかは分かりませんが、毎回問題なくクラスでやったことは分かります。 –

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

float standard_deviation (float variance) 
{ 
    float deviation = 0.0; 
    deviation = pow(variance, 0.5); 
    return deviation; 
} /* mean */ 

float standard_error (float standard_deviation, int number_of_elements) 
{ 
    return standard_deviation/pow(number_of_elements, 0.5); 
} /* mean */ 

int main(int argc, char *argv[]) 
{ 
     printf ("%f\n", standard_deviation (1.0)); 
     return 0; 
} 

次のように呼び出されたときに何の問題もなくコンパイル:あなたが最初に.oファイルをする.Cをコンパイルする場合

gcc test10.c -o test10 -lm 

、あなただけの実行ファイルを生成し、最終的なリンク段階で-lmを必要としています。

関連する問題