-fvisibility=hidden
デフォルトですべてのシンボルを非表示にします .
次に行う必要があるのは、ライブラリにリンクしているユーザーに表示する関数を選択し、visible 属性でマークしてそれらを表示することです。
例
void __attribute__((visibility("default"))) Exported()
{
// ...
}
共有オブジェクトにプライベートな不要なシンボル情報の保存を減らします。
10,000 を超えるシンボル (関数/グローバル変数) を持つ共有オブジェクトを考えてみますが、ライブラリ ユーザーがアクセスできるパブリック関数はそのうちの 100 のみでした。 100 個の関数のみを他のユーザーに表示することができ、残りの 9,900 個のシンボルは非公開にします。
また、再配置テーブルには 100 シンボルの情報しか含まれないため、共有オブジェクトのサイズを縮小するためにも使用できます。このフラグを -ffunction-sections -fdata-sections とともに使用する これらの 100 個のシンボルに関連する定義を持つことで、共有オブジェクトのサイズをさらに削減します。