“Undefined Reference Error” 是在程序链接(link)时经常遇到的错误,字面意思来说就是没有找到已经定义的引用,在编译器无法找到用户所使用的变量或函数:
一、缺失头文件
例如声明变量 uint64_t tmp,但没有在开头包含 #include<stdint.h>
例如使用 memset() 需要包含头文件 string.h 或 memory.h
二、缺失目标文件或者库文件(.a .o .so …)
编译器查找用户函数,首先会在本文件中的函数中找,然后在系统环境变量定义的目标文件/库(.a .o .so …)文件中找,最后在链接的目标文件/库文件(.a .o .so …)中寻找用户函数;如果没有找到则报”Undefined Reference Error”错
四、库(目标)文件链接顺序有误
库文件的链接顺序是:依赖的库A 放后面,被依赖的库B 放前面。如果A 和B 相互依赖,则使用A B A 或者B A B 的。
例如main 文件中引用func 文件中函数,则编译顺序为main.o func.o
五、C 函数和C++函数引用问题
C++ 程序链接时可以链接C 的库文件,但在.cc(.cpp) 中引用头文件时需要通过extern “C”{ #include “func.h”} 的方式引用该头文件,否则会提示”Undefined Reference Error”
C 程序无法链接C++ 库文件,否则会提示”Undefined Reference Error”,找不到引用C++ 函数的引用