pub enum Visibility {
Default,
Hidden,
Protected,
}Expand description
How far outside a shared library a name reaches.
A different question from Linkage and asked of a different linker. The linkage is what the
static linker does with a name while it is building the output, and this is what the dynamic
linker may do with it once that output is a shared library and is being loaded. A hidden name
is still external as far as the static link is concerned, so two files in the same library
reach each other by it; it is simply not in the dynamic symbol table afterwards.
Four strings are written and there are three answers, because internal is hidden plus a
promise the program makes about never taking the address across a component boundary. Reading
it as hidden gives less than was asked for, which is safe in the way -fstrict-aliasing is
safe: every program correct under the stronger assumption is correct under the weaker one and
nothing here derives anything from the difference. It is written down in
spec/13-gnu-compat.md section 13.4 rather than left for someone to find in the output.
Variants§
Default
In the dynamic symbol table and interposable, which is what a name gets when nothing said
otherwise and what visibility("default") puts back after -fvisibility=hidden.
Hidden
Not in the dynamic symbol table, so nothing outside the library can name it.
Protected
In the dynamic symbol table, and a reference from inside the library binds to the definition inside it.
Trait Implementations§
Source§impl Clone for Visibility
impl Clone for Visibility
Source§fn clone(&self) -> Visibility
fn clone(&self) -> Visibility
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more