1

私はここのチュートリアルに従おうとしています:

http://cocoadevcentral.com/articles/000081.php

そして、「ヘッダーファイル」セクションに到達するとすぐにgcc test1.c -o test1、Mac OSXコマンドラインで実行した後、奇妙なエラーメッセージが表示され続けました。

Undefined symbols for architecture x86_64:
  "_sum", referenced from:
      _main in ccdZyc82.o
  "_average", referenced from:
      _main in ccdZyc82.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

math_functions.h:

int sum(int x, int y);
float average(float x, float y, float z);

math_functions.c:

int sum(int x, int y) {
  return x + y;
}

float average(float x, float y, float z) {
  return (x + y + z)/3;
}

そして最後に、私のtest1.c:

#include <stdio.h>
#include "math_functions.h"

main() {
  int thesum = sum(1, 2);
  float ave = average(1.1, 2.21, 55.32);

  printf("sum = %i\nave = %f\n(int)ave = %i\n", thesum, ave, (int)ave);
}

私はすべてを正しくフォローしたようで、そのエラーがどこから来ているのかわかりません。ヘルプ?

4

2 に答える 2

2

math_functions.cとtest1.cの2つの別個のソースファイルがあり、両方をコンパイルしてリンクする必要があります。averageエラーメッセージは、コンパイラが関数を見つけられないことを示しています。これは、関数floatがmath_functions.cからのものであり、test1.cのみをコンパイルしたためです。

リンクした例では、次のように入力するように指示されています。

gcc test3.c math_functions.c -o test3
于 2012-07-16T09:21:18.053 に答える
1

sum()およびaverage()関数を含むオブジェクトファイルにリンクしていません。

これを行う:

$ gcc -c -o math_functions.o math_functions.c
$ gcc -c -o test1.o test1.c
$ gcc -o test1 test1.o math_functions.o

最初の2行は、ソースファイルをオブジェクトファイルにコンパイルし、最後の行は、オブジェクトファイルを実行可能ファイルにリンクします。

コンパイルするためだけに開発者がわざわざ入力する必要はないので、学習に時間をかける必要がありmakeます(また、ファイル名が間違っていて、ソースファイルにコンパイルされていることに気付く前に!)。

于 2012-07-16T09:16:27.430 に答える