跳转至

强符号和弱符号

强符号(Strong Symbol)通常指的是以下几种情况:

  • 非平凡的初始化的全局变量(例如 int a = 10;)。
  • 任何函数或已定义的静态变量。
  • 在C++中,已定义的非内联的静态成员函数。

弱符号(Weak Symbol)通常指的是以下几种情况:

  • 未初始化的全局变量(例如 int a;)。
  • 在C或C++中使用__attribute__((weak))__declspec(selectany)修饰的符号。
  • 在C++中,已声明但未定义的纯虚函数。

链接器处理这些符号的规则通常如下:

  • 如果一个符号有多个强符号定义,链接器会报错,因为不知道应该使用哪一个。
  • 如果一个符号有强符号和弱符号定义,链接器会使用强符号。
  • 如果一个符号有多个弱符号定义,链接器会任意选择一个使用。

评论