Common C++ Error Messages : Undefined reference
简述
我们编译代码时经常会遇到这个错误, 其实这个错误是链接器触发的. 为了解决这个问题我们需要知道一些基础
编译基础
我们的代码编译大致分2部. 编译和链接
通常我们的源代码是分开编译的, 每一个源代码编译成为目标码(后缀为.o或.obj). 但是每个.o或.obj文件对它之外的情况是不知道的. 这就是链接器接手的部分. 查看所有的目标码文件, 计算出每个函数的地址, 然后输出最后的二进制文件.
哪些情况会触发该错误
- 没有定义
只提供了函数声明, 但是没有函数定义, 这个数最常见的错误
- 错误的定义
声明和定义不一致. 有些编译器在编译时就会报警或按错误处理
-
没有链接到目标文件或库文件
-
调用规则不一致
这个比较少见, 常见于C和C++混合的时候. C++调用C函数的时候也会报该错误, 这是因为C++为了支持函数重载,会对函数名进行混淆操作. 因此需要加extern "C"处理.
总结
总之该错误总结起来就是: 链接器找不到定义.
遇到这种错误按照上述常见规则来对应检查一般都能解决.