gcc 4系での新機能に visibility support ってのがある.http://gcc.gnu.org/wiki/Visibility
この"visibility" ってのは,シンボル名を公開するか非公開にするか,つまり外部から見えるか見えないかの属性のことみたい.具体的には,次のように使う.
__attribute__ ((visibility("default"))) void global_function() __attribute__ ((visibility("hidden"))) void local_function()
これにより
- 共有ライブラリのサイズを5〓20%ほど小さくできる.
- 共有ライブラリのロード時間を短くできる.
などの効果が得られるとのこと.
5〓20%といえばかなりの割合である.手元のlinuxでは /usr/lib 以下の *.so だけで300MB近くあることから,gcc4でビルドしなおすだけでシステム全体で50M〓100MBぐらいHDDを節約できる可能性がある.