未知的Objective-C错误“架构x86_64的未定义符号”,一切似乎都可以

时间:2012-07-16 09:10:06

标签: objective-c ios

我正在尝试按照这里的教程:

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

当我到达“Header files”部分时,在Mac OSX命令行中运行gcc test1.c -o test1后,我一直收到一条奇怪的错误消息:

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);
}

我似乎已经正确地遵循了所有内容,但我不明白该错误的来源。帮助

2 个答案:

答案 0 :(得分:2)

你有两个独立的源文件,math_functions.c和test1.c,它们都需要编译和链接在一起。错误消息告诉您编译器找不到函数averagefloat,这是因为它们来自math_functions.c并且您只编译了test1.c。

您链接的示例告诉您输入:

gcc test3.c math_functions.c -o test3

答案 1 :(得分: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

前两行将源文件编译为目标文件,最后一行将目标文件链接到可执行文件中。

你需要投入一些时间来学习make,因为没有开发人员可以费心去编译那么多(在你知道它之前你的文件名错误并在源文件上编译了!)