强符号和弱符号
强符号(Strong Symbol)通常指的是以下几种情况:
- 非平凡的初始化的全局变量(例如
int a = 10;
)。 - 任何函数或已定义的静态变量。
- 在C++中,已定义的非内联的静态成员函数。
弱符号(Weak Symbol)通常指的是以下几种情况:
- 未初始化的全局变量(例如
int a;
)。 - 在C或C++中使用
__attribute__((weak))
或__declspec(selectany)
修饰的符号。 - 在C++中,已声明但未定义的纯虚函数。
链接器处理这些符号的规则通常如下:
- 如果一个符号有多个强符号定义,链接器会报错,因为不知道应该使用哪一个。
- 如果一个符号有强符号和弱符号定义,链接器会使用强符号。
- 如果一个符号有多个弱符号定义,链接器会任意选择一个使用。