You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC分步编译报undefined reference to main但直接编译正常如何解决

错误原因
  • 核心问题是分步编译第二步的参数拼写错误:你误用了大写的-C参数,而生成目标文件需要使用小写的-c参数。
    • 大写-C是GCC预处理阶段的专属参数,作用是保留源代码中的注释,仅配合-E(预处理)参数使用时生效,无法生成目标文件。
    • 未添加-c参数时,GCC会尝试对输入的test.i执行完整的编译+链接流程,你强制指定输出为test.o,最终得到的文件并不是合法的可重定位目标文件,内部没有正确导出main函数符号,因此链接器扫描该文件时找不到程序入口main,抛出对应报错。
解决方法

将第二步的大写-C替换为小写-c即可,完整正确的分步编译流程如下:

  1. 预处理阶段(生成预处理后的.i文件,如需保留注释可额外添加-C参数)
gcc -E test.c -o test.i
  1. 编译汇编阶段(小写-c参数表示仅执行到汇编阶段,不触发链接,输出.o格式的目标文件)
gcc -c test.i -o test.o
  1. 链接阶段(将目标文件和C标准库链接生成可执行文件)
gcc test.o -o test

修改参数后即可正常编译运行。

内容的提问来源于stack exchange,提问作者user14479570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:03