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

Linux下C程序编译报undefined reference to `get_a_day'错误求助

C 程序链接错误问题排查方案

你贴出的代码本身语法、函数声明、实现逻辑均无问题,该undefined reference报错属于链接阶段错误,即编译器可通过头文件找到get_a_day的函数声明,但链接时无法匹配到对应的函数实现符号,按以下优先级排查即可解决:

  • 第一步:检查文件存在性与路径正确性
    Linux 系统文件名区分大小写,先执行以下命令确认编译命令执行目录下存在所有需要的源文件:
    ls *.c *.h
    确认输出同时包含main.c、redirect_ptr.h、redirect_ptr.c三个文件,没有拼写错误、大小写错误、多余空格等问题。

  • 第二步:清理旧编译产物后重新编译
    若存在之前编译生成的残次.o目标文件,可能导致符号匹配错误,先执行清理命令:
    rm -f *.o main
    再重新执行编译命令:
    gcc main.c redirect_ptr.c -o main

  • 第三步:检查函数符号导出状态
    若上述两步仍未解决,可单独编译目标文件确认符号导出是否正常:

    1. 分别生成两个源文件的目标文件:
      gcc -c main.c && gcc -c redirect_ptr.c
    2. 查看main.o的依赖符号:
      nm main.o | grep get_a_day
      正常输出应为带U标记的get_a_day,表示该符号需要外部实现
    3. 查看redirect_ptr.o的导出符号:
      nm redirect_ptr.o | grep get_a_day
      正常输出应为带T标记的get_a_day,表示该函数是可全局调用的代码段符号
      若输出为带小写t标记的get_a_day,说明你本地的get_a_day函数定义前多了static修饰符,仅允许文件内调用,去掉static关键字即可。

按上述步骤操作后即可正常编译,运行生成的main可执行文件,输出结果为Sunday Monday。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:18:03