Ste*_*ke2 1 c macos linker-errors undefined-reference undefined-symbol
对不起,如果这是一个重复的问题,但我找不到有效的答案.
我很长一段时间以来第一次写了一个Hello World C程序.我相当肯定代码是正确的,但它不会编译.
运行MAC OS 10.13.6,我上周刚刚下载了XCode.该程序使用编译成目标文件
cc -c test.c -o test.o
Run Code Online (Sandbox Code Playgroud)
没问题.但是,我无法使用创建可执行文件
cc test.o -o test
Run Code Online (Sandbox Code Playgroud)
这是代码:
#include <stdio.h>
int Main()
{
printf("Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我去创建可执行文件时,我得到了
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
我猜我需要添加一些编译器标志,但无法弄清楚哪些.
小智 5
听起来你刚刚开始进入c代码.这是学习c,编译和链接的好机会.
你所写的内容可以很好地编译成一个目标文件(包含一个名为Main()的函数).但是,要链接到可以从您的操作系统运行的可执行文件,您需要定义一个入口点,该入口点被假定为一个名为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;
}
Run Code Online (Sandbox Code Playgroud)
Main需要小写main.int main()可行但int main(void)技术上更准确(参见
void main(void)vs main())\n.(https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm)