在处理导出的符号时,GCC会自动导出所有符号(遵循__attribute__((visibility("default)))
的行为)。您可以使用-fvisibility=hidden
或通过手动设置每个符号以具有所需的行为来更改此行为。
这两个设置是经常使用的唯一设置,但可见性设置也有protected
和internal
选项。 GCC表示,这些选项“在实际使用中几乎没有用”,但我仍然想知道它们的作用,并且在手册页或Google的其他地方都没有看到任何有关此的信息。
他们做什么?它们有实际用途吗?
编辑:有人帮助我指出了an explanation of internal,但是protected
属性的作用是什么? The function attributes page说
具有隐藏链接的对象的两个声明,如果它们在同一共享对象中,则引用同一对象。
但这是什么意思?以下代码是否有效?
__attribute__((visibility("hidden"))) int a = 4;
...
...
__attribute__((visibility("hidden"))) int a = 9;
...
...
__attribute__((visibility("hidden"))) char a = 'a';