#pragma weak symbol1 [= symbol2]
此 pragma 定义弱全局符号。它主要在构建库时使用。如果链接程序无法解析弱符号,它并不生成错误消息。
#pragma weak symbol
将 symbol 定义为弱符号。如果链接程序找不到 symbol 的定义,它不会生成错误消息。
#pragma weak symbol1 = symbol2
将 symbol1 定义为弱符号,它是符号 symbol2 的别名。只能在已定义 symbol2(可以在源文件中定义,也可以在其包含的某个头文件中定义)的同一转换单元中使用这种形式的 pragma。否则,将导致编译错误。
如果程序调用但未定义 symbol1,并且 symbol1 在所链接的库中是弱符号,则链接程序使用该库中的定义。但是,如果程序定义自己的 symbol1 版本,则使用该程序的定义,而不使用库中 symbol1 的弱全局定义。如果程序直接调用 symbol2,则将使用库中的定义。重复定义 symbol2 会导致错误。