gcc 报错undefined reference to `main' collect2: error: ld returned 1 exit status
简单的错误,以备后察。
gcc 52_process_fork_wait.c
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status
已解决,因为vscode编辑后,未保存源文件而直接在terminal里gcc,特别是vscode编辑多个源文件,随手保存编辑区。
gcc
GCC(GNU Compiler Collection)的编译过程可以划分为四个阶段:
- 预处理(Pre-Processing)
- 编译(Compiling)
- 汇编(Assembling)
- 链接(Linking)
原图来自gcc 编译命令详解及最佳实践
常用 gcc 选项
gcc [options] file...
-E :仅执行预处理(不要编译、汇编或链接)。
-S :只编译(不汇编或链接)。
-c :编译和汇编,但不链接。
-o <file> :指定输出文件。
-pie :创建一个动态链接、位置无关的可执行文件。
-I :指定头文件的包含路径。
-L :指定链接库的包含路径。
-shared :创建共享库/动态库。
-static :使用静态链接。
--help :显示帮助信息。
示例
默认生成 a.out
$ gcc 52_process_fork_wait.c
$ ls
51_process_fork.c 52_process_fork_wait.c a.out ch02
$ ./a.out
hello world (pid:1067)
Hello, I am child (pid: 1068)
hello, I am parent of 1068 (wc:1068) (pid: 1067)
-o
$ gcc 51_process_fork.c -o 51_process_fork
$ ls
51_process_fork 51_process_fork.c 52_process_fork_wait.c a.out ch02
$ ./51_process_fork
hello world (pid:1222)
hello, I am parent of 1223 (pid: 1222)
Hello, I am child (pid: 1223)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)