1.对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为若符号。
2.强符号规则:一、不允许强符号被多次定义。二、如果一个符号在某目标文件中是强符号,在其他文件中是若符号,那么选择强符号
3.如果一个符号在所有的目标文件中都是若符号,则选择其中占用空间最大的一个如:A定义全局变量GLOBAL为INT型,占4个字节,目标B定义GLOBAL为DOULBE型,占8个字节,那么目标文件A和B链接后,符号GLOBAL占8个字节。
4.强引用,对外部目标文件的符号引用在目标文件被最终链接成可执行文件时,它们必须要被正确决议,如果没有找到该符号的定义,链接器就会报符号未定义错误,这种被称为强引用。与之相对应的还有一种弱引用,原理与强引用一模一样,只不过链接器不认为这是一个错误。
5.链接时符号未定义,导致这个问题的情况非常多,最常见的一般就是链接时缺少某个库。或者输入目标文件路径不正确或符号的声明与定义不一样。