0

重複の可能性:
Cにファイルを含める

RunCを使用して、powとfloor/truncateを必要とする単純な関数を記述しています。math.hを含めました。メインの機能を使ってみると問題ありません。しかし、別のint関数を作成しようとすると、突然RunCにpow関数とfloor関数がなくなり、エラーが発生します。何か助けはありますか?

コードは次のとおりです。main()は機能しますが、まったく同じことを行う上記の関数を使用するように切り替えると、機能しません。

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

int sumofsquares(int x){
   int counter = 0;
   int temp = x;

   while (temp != 0 || counter == 100){
      //temp = temp - (int)pow(floor(sqrt(temp)), 2);
      //temp = temp - pow(temp, 0.5);
      printf("%d\n", temp);
      counter = counter + 1;
   }

   /*while(temp != 0){
      temp = temp - (int)pow(floor(sqrt(temp)), 2);
      counter ++;
   }*/
    return counter;
}

int main(void){
   printf("%d", (int)pow(floor(sqrt(3)), 2));
}

これを行う:

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

int sumofsquares(int x){
   int counter = 0;
   int temp = x;

   while(temp != 0){
      temp = temp - (int)pow(floor(sqrt(temp)), 2);
      counter ++;
   }
    return counter;
}

int main(void){
   printf("%d", sumofsquares(3));
}

このエラーを返します:

/tmp/cctCHbmE.o: In function `sumofsquares':
/home/cs136/cs136Assignments/a04/test.c:9: undefined reference to `sqrt'
/home/cs136/cs136Assignments/a04/test.c:9: undefined reference to `floor'
collect2: ld returned 1 exit status
4

2 に答える 2

0

gcc を使用してプログラムをコンパイルします。

gcc -lm -o foo foo.c
于 2012-02-22T21:08:07.183 に答える
0

あなたの作業main機能では、

printf("%d", (int)pow(floor(sqrt(3)), 2));

ここでの引数は定数であることに注意してください。最適化コンパイラは通常、コンパイル時に式を評価し、math.h関数の呼び出しを排除します。したがって、数学ライブラリをリンクしなくても機能します。ただし、計算に変数が含まれる場合、通常はコンパイル時に評価できないため、math.h関数への呼び出しが残り、数学ライブラリでリンクしないと、リンクは失敗します。試す

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

int main(int argc, char *argv[]) {
    // don't really use atoi, it's here just for shortness
    int num = argc > 1 ? atoi(argv[1]) : 3;
    printf("%d\n", (int)pow(floor(sqrt(num)),2));
    return EXIT_SUCCESS;
}

数学ライブラリがコンパイラ コマンド ラインでリンクされるように指定されていない場合、これもリンクに失敗するはずです。

gcc では、コマンド ラインは次のようになります。

gcc -O3 -Wall -Wextra -o foo foo.c -lm

リンクするライブラリは、コマンド ラインの最後に配置する必要があります。多くのバージョンでは、必要なシンボルがわかる前にライブラリを指定すると機能しないためです。

残念ながら、私は RunC をまったく知らないので、それと数学ライブラリをリンクする方法をまだ教えることはできません。私は見つけようとしています。

私のgoogle-fuは弱すぎます。RunC に関する有用なドキュメントは見つかりませんでした。また、ツール自体を確認するために Ubuntu をインストールするつもりもありません。

于 2012-02-22T21:55:12.467 に答える