【问题标题】:Unable to compile Hello World无法编译 Hello World
【发布时间】:2019-01-20 15:36:34
【问题描述】:

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

我很长时间以来第一次编写 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

我猜我需要添加一些编译器标志,但不知道是哪些。

【问题讨论】:

  • int Main() 这不是您在 C 中编写 main 函数的方式。
  • C 中的名称区分大小写,入口函数需要命名为“main”,而不是“Main”。
  • C 区分大小写 "Main" 不是 "main"
  • main() 不带参数时,它是int main(void)
  • @alk 人们倾向于将初学者的错误与糟糕的问题混为一谈。

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


【解决方案1】:

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

您编写的内容可以很好地编译成目标文件(包含一个名为 Main() 的函数)。但是,要链接到可以从您的操作系统运行的可执行文件,您需要定义一个入口点,该入口点被假定为一个名为 main 的函数(区分大小写,如 John 上面提到的)。

查看此资源: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;
}

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2021-02-21
    • 2018-09-12
    相关资源
    最近更新 更多