link 错误
链接错误一般有两种:undefined symbol/reference 和duplicated symbol
先来看一下程序链接的过程,举一个简单地例子。Main.cpp调用了lib.cpp中定义的方法和global变量。则过程如下:
首先源文件lib.cpp编译后生成目标文件(包含函数和变量的定义),main.cpp编译生成目标文件(记录自己引用了外部符号),链接器为main去目标文件查找外部符号,找到了则链接成功。
undefined symbol/reference错误:
1、 工程缺少源文件(如果我们将Cmakelists.txt中lib.cpp的源文件路径注释掉,编译器会报undefined reference—>xorcpp(int,int)错误)
2、 C与C++生成符号的名字规则的不同之处,考虑如下lib.h的更改:
lib.h内容:
如果将lib.h改为上图2中的内容,则编译器会报undefined reference—>xorcpp错误,注意与1中的差别。由于我们加了extern “C”, 表示按照C风格的符号名字去查找(xorcpp)。
duplicated symbol错误:
1、头文件里定义变量
如果将lib.h改为右图中的内容,则编译器会报multiple reference—>global_integer错误。
2、多文件里误用相同名字(如果在main.cpp中也定义global_integer变量)