运行环境: OS, Archlinux Compiler, gcc 4.6.0
C程序(为说明问题,其他不相关的文件不表): a.c (含main函数),b.c, b.h(有工具函数f())
问题:undefined reference to 'f'
卡了我好久,现在总结一下,Undefined reference to的错误一般有以下几种:
1)makefile写错
注意链接语句中一定要有b.c生成的b.o,在依赖关系一行和链接命令一行都要写,一共两个b.o不要漏
a: a.c b.o b.h
$(CXX) $(CFLAGS) a.c b.o -o a -lm
这个错误解决方法是在网上学到的,不过检查发现我的makefile没有问题,原因是下面的错误
2)b.c没有#include "b.h"
尝试在a.c中去到#include "b.h",结果报告的错误变成了: 'f’在此作用域中尚未声明
头文件没有问题,再到b.c中看,原来有b.c中忘记#include “b.h”了。没有#include "b.h",b.o中没有f的符号,在链接中肯定找不到f函数的实现了。
3)如果还有其他常见原因,欢迎大家补充