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

如何修复undefined reference to `main' collect2: ld returned 1 exit status报错

问题排查与修复方案

该undefined reference to main错误本质是链接器生成可执行文件时,未找到C/C++程序要求的全局入口函数main,可按以下步骤排查:

  • 第一步:检查源码存放路径与后缀是否符合Makefile预期
    Makefile中定义的待编译源文件匹配规则为host/src/*.cpp和../common/src/AOCLUtils/*.cpp,首先确认携带main函数的主机代码是否存放在host/src/目录下,且文件后缀为.cpp。可执行命令ls host/src/确认路径下的文件列表,排查是否存在文件放错目录、后缀误写为.c/.cc等问题。
  • 第二步:检查main函数定义是否符合规范
    全局作用域下的main函数必须为标准写法,以下两种为合法格式:
    int main()
    // 或
    int main(int argc, char* argv[])
    
    需排查是否存在以下错误:
    • 函数名拼写错误,比如写成Main、MAIN等
    • main函数被包裹在自定义命名空间中,导致全局作用域无法识别
    • 遗漏main函数的返回值声明,比如写为void main()(该写法不符合GCC的C/C++标准要求)
  • 第三步:验证Makefile是否正确识别到所有待编译文件
    在Makefile的SRCS := $(wildcard host/src/*.cpp ../common/src/AOCLUtils/*.cpp)行后新增一行$(info 待编译文件列表: $(SRCS)),执行make后查看输出的文件列表,确认携带main函数的文件是否在列表内。
    也可以直接执行make VERBOSE=1开启编译日志输出,查看实际执行的g++命令后携带的源文件是否完整,是否遗漏了你的业务代码文件。

常见修复方案

  • 如果是路径不匹配:修改SRCS变量里的路径规则,适配你实际的项目目录结构,比如源码放在当前目录src/下,就修改为SRCS := $(wildcard src/*.cpp ../common/src/AOCLUtils/*.cpp)
  • 如果是函数定义错误:按标准写法修正main函数的定义
  • 如果是目录结构不符:将你编写的主机代码移动到host/src/目录下,并重命名后缀为.cpp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:57:04