Specifies the default visibility for global symbols or the visibility for symbols in a file.
Windows: None
Linux: Data > Default Symbol Visibility
Mac OS: Data > Default Symbol Visibility
IA-32 architecture, Intel® 64 architecture, IA-64 architecture
Linux and Mac OS: | -fvisibility=keyword -fvisibility-keyword=file |
Windows: | None |
keyword | Specifies the visibility setting. Possible values are: | |
default | Sets visibility to default. | |
extern | Sets visibility to extern. | |
hidden | Sets visibility to hidden. | |
internal | Sets visibility to internal. | |
protected | Sets visibility to protected. |
file | Is the pathname of a file containing the list of symbols whose visibility you want to set. The symbols must be separated by whitespace (spaces, tabs, or newlines). |
-fvisibility=default | The compiler sets visibility of symbols to default. |
This option specifies the default visibility for global symbols (syntax -fvisibility=keyword) or the visibility for symbols in a file (syntax -fvisibility-keyword=file).
Visibility specified by -fvisibility-keyword=file overrides visibility specified by -fvisibility=keyword for symbols specified in a file.
Option | Description |
---|---|
-fvisibility=default -fvisibility-default=file |
Sets visibility of symbols to default. This means other components can reference the symbol, and the symbol definition can be overridden (preempted) by a definition of the same name in another component. |
-fvisibility=extern -fvisibility-extern=file |
Sets visibility of symbols to extern. This means the symbol is treated as though it is defined in another component. It also means that the symbol can be overridden by a definition of the same name in another component. |
-fvisibility=hidden -fvisibility-hidden=file |
Sets visibility of symbols to hidden. This means that other components cannot directly reference the symbol. However, its address may be passed to other components indirectly. |
-fvisibility=internal -fvisibility-internal=file |
Sets visibility of symbols to internal. This means the symbol cannot be referenced outside its defining component, either directly or indirectly. |
-fvisibility=protected -fvisibility-protected=file |
Sets visibility of symbols to protected. This means other components can reference the symbol, but it cannot be overridden by a definition of the same name in another component. |
If an -fvisibility option is specified more than once on the command line, the last specification takes precedence over any others.
If a symbol appears in more than one visibility file, the setting with the least visibility takes precedence.
The following shows the precedence of the visibility settings (from greatest to least visibility):
Note that extern visibility only applies to functions. If a variable symbol is specified as extern, it is assumed to be default.
None
A file named prot.txt contains symbols a, b, c, d, and e. Consider the following:
-fvisibility-protected=prot.txt
This option sets protected visibility for all the symbols in the file. It has the same effect as specifying fvisibility=protected in the declaration for each of the symbols.
Optimizing Applications: Symbol Visibility Attribute Options (Linux* and Mac OS*)