序言:
define : 定义。相信你用过 #define PI 3.141592653 (千万记得别在这句代码后加分号)
reference : 引用
undefined reference to something 的意思就是说,你在代码里用了一个没有定义的 something 。
链接时可能会引发这种错误的情况:
1 链接时缺失了相关的目标文件(.o)
2 链接时缺少相关的库文件(.a/.so)
3 链接的库文件中又使用了另一个库文件
4 多个库文件链接顺序
5 在C++的代码中链接C语言的库
详情:
1 链接时缺失了相关的目标文件(.o)
测试代码如下:
//main.c
int main() {
test(); }
//test.c #include<stdio.h> void test() { printf("lover "); }
编译:
gcc -o main main.c //缺少test()的实现文件
会报如下错误:
main.c: In function `main':
main.c:(.text+0x7): undefined reference to `test'
collect2: ld returned 1 exit status
这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包
含了test()函数的实现,所以如果按下面这种方式链接就没事了 。
gcc -o main main.c test.c //ok,没问题了
TODO