gcc 4.2.1链接问题:体系结构x86_64的未定义符号

时间:2013-06-10 08:40:20

标签: c macos gcc osx-mountain-lion

是的,之前有人问过,但是我在SO和其他地方提出的每个答案都与编译gcc中的C ++代码而不是g ++有关,或者与标准库有某种问题。到目前为止,在这里没有任何实际的排队方式。

所以,我正在进行C语言的基础速成课程,并尝试编译一个示例,用于说明链接到您创建的文件,而不是标准库。这是代码:

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

最后

test3.c

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

main ()
{
  int   theSum     = sum (8, 12);
  float theAverage = average (16.9, 7.86, 3.4);

  printf ("the sum is: %i ", theSum);
  printf ("and the average is: %f \n", theAverage);
  printf ("average casted to an int is: %i \n", (int)theAverage);
}

这些都在同一个文件夹中。当我打开终端时,cd到文件夹并运行:

gcc test3.c -o test3

我明白了:

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

如果我使用gcc或g ++(我不应该这样做,因为这应该都是C)会发生这种情况,而我之前编译的所有内容现在都可以正常使用

#include <stdio.h>

在顶部。

我可以通过删除

来编译并运行正常
#include "math_functions.h"
来自 test3.c 文件的

,在main()之前放置 math_functions.h 的内容,在 math_functions.c 之后放置 math_functions.c 的内容主要()。是的,这是复制和粘贴,因此它的代码完全相同。

所以是的,我可以让我的代码工作,但它失败了练习的目的,因为我最终无法在任何其他C文件中使用该代码而不复制它并将其粘贴到一个档案......

所以我想知道,有没有办法解决这个问题,所以我可以包含更多只有标准的C,C ++和Objective-C库?

这可以通过终端盒,手动输入gcc命令,以及通过CodeRunner来实现,CodeRunner将标准命令全部隐藏在一个按钮中,所以我无法填充它。

我使用Xcode 4.6.2中的命令行工具在2012 Mac Mini上运行Mountain Lion 10.8.4(12E55)(几小时前安装它们,我实际上没有做太多标准使用到目前为止的Mini)

我在MacBook Air上安装了所有相同的软件,但尚未对其进行测试,以确定是否存在同样的问题。

任何指针?如果其他人已经有了这个并在SO的某处工作了,请指点我,我一直在寻找一个小时,但就像我之前所说的那样,到目前为止我找到的所有解决方案最终都是在那里是C ++代码或标准库的奇怪之处。

1 个答案:

答案 0 :(得分:6)

您只需要编译maths_function。链接器抱怨它没有该模块中包含的定义。

gcc test3.c math_functions.c -o test3