Description of Problem: If you have a function that is only used as the helper function of a symbol exported from a shared library, then the traditional appraoch would be to declare the symbol static -- giving it file scope and removing it from the ABI of the library. However this is only visibility=hidden, as far as the compiler understands it (as you could use that function in a function ptr etc.) This means that if you declare the function "extern" with attribute visibility=internal the compiler will generate better code. Version-Release number of selected component (if applicable): gcc-2.96-112 How Reproducible: Always Steps to Reproduce: 1. Add an visibility("internal") attribute to a static function. Actual Results: The compiler gives a "`visibility' attribute ignored" warning. Expected Results: The compiler obeys the attribute just as if it was an extern declaration. Additional Information:
No, using "static" is the absolute best you can tell the compiler. Even better than visibility=internal (which, incidentally, the compiler does nothing special with at present). It means that all references to the symbol are visible in the current translation unit. Visibility attributes are not applicable to STB_LOCAL symbols, so the compiler is right to complain.