无法编译Hello World

时间:2019-01-20 15:36:35

标签: c macos linker-errors undefined-reference undefined-symbol

很抱歉,如果这是一个重复的问题,但我找不到有效的答案。

我很长时间以来第一次在编写Hello World C程序。我相当确定代码是正确的,但是不会编译。

运行MAC OS 10.13.6,我上周刚刚下载了XCode。程序使用

编译成目标文件
cc -c test.c -o test.o

没有问题。但是,我无法使用

创建可执行文件
cc test.o -o test

代码如下:

#include <stdio.h>
int Main()
{
    printf("Hello World");
    return 0;
}

当我创建可执行文件时,我得到

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64

我猜我需要添加一些编译器标志,但无法弄清楚哪个标志。

1 个答案:

答案 0 :(得分:5)

听起来您刚刚开始使用C代码。这是学习c,编译和链接的绝佳机会。

您编写的内容可以很好地编译成目标文件(包含一个称为Main()的函数)。但是,要链接到可以在您的OS上运行的可执行文件,您需要定义一个入口点,该入口点被假定为一个称为main的函数(如上文所述,区分大小写)。

请查看以下资源:http://www.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html,以了解gcc编译器在幕后的工作。

您只需要进行一些小的更改即可使您的代码按预期工作:

#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}