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第三步:检查函数符号导出状态
若上述两步仍未解决,可单独编译目标文件确认符号导出是否正常:- 分别生成两个源文件的目标文件:
gcc -c main.c && gcc -c redirect_ptr.c - 查看
main.o的依赖符号:nm main.o | grep get_a_day
正常输出应为带U标记的get_a_day,表示该符号需要外部实现 - 查看
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
相关产品推荐
相关产品推荐

