c - 无法编译 Hello World

标签 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

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

最佳答案

听起来您的 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;
}

关于c - 无法编译 Hello World,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54278031/

相关文章:

c - OpenSSL/OCSP 装订;如何在传递给 SSL_CTX_set_tlsext_status_cb(...) 的回调中访问 SSLContext?

c - 使用 gdk_pixbuf_composite() 的 Sprite 贴图问题

python - 从 c 字符数组创建 PyString 而不复制

在递归函数内重新分配缓冲区后,无法释放缓冲区的数据。可能是什么原因?

c - Mac OS X 上的标准 C 库在哪里?

swift - 调整大小后的图像周围有白色边框

c++ - 使用 sublime text 2 错误使用 mingw 编译 SDL2

c - 如何从苹果网站获取套接字过滤器句柄(sflt_filter.sf_handle)的值以注册数据包过滤

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

iphone - 部署目标为 7.0 时架构错误的 undefined symbol