2.2 Linker Scoping Specifiers
Use the following declaration specifiers to help hide declarations and definitions
of extern symbols. By using these specifiers, you no longer need to use mapfiles
for linker scoping. You can also control the default setting for variable
scoping by specifying -xldscope on
the command line. For more information, see B.2.96 -xldscope={v}.
Table 2–2 Declaration Specifiers
Value
|
Meaning
|
__global
|
The symbol has global linker scoping and is the least restrictive
linker scoping. All references to the symbol bind to the definition in the
first dynamic module that defines the symbol. This linker scoping is the current
linker scoping for extern symbols.
|
__symbolic
|
The symbol has symbolic linker scoping and is
more restrictive than global linker scoping. All references to the symbol
from within the dynamic module being linked bind to the symbol defined within
the module. Outside of the module, the symbol appears as though it were global.
This linker scoping corresponds to the linker option -Bsymbolic.
For more information on the linker, see ld(1).
|
__hidden
|
The symbol has hidden linker scoping. Hidden linker scoping is more
restrictive than symbolic and global linker scoping. All references within
a dynamic module bind to a definition within that module. The symbol will
not be visible outside of the module.
|
An object or function may be redeclared with a more restrictive specifier,
but may not be redeclared with a less restrictive specifier. A symbol may
not be declared with a different specifier once the symbol has been defined.
__global is the least restrictive scoping, __symbolic is more restrictive, and __hidden is the most
restrictive scoping.