GNU/Linux >> Linux の 問題 >  >> Linux

C++ -fvisibility=hidden -fvisibility-inlines-hidden

-fvisibility=hidden デフォルトですべてのシンボルを非表示にします .

次に行う必要があるのは、ライブラリにリンクしているユーザーに表示する関数を選択し、visible 属性でマークしてそれらを表示することです。

void __attribute__((visibility("default"))) Exported()
{
    // ...
}

共有オブジェクトにプライベートな不要なシンボル情報の保存を減らします。

10,000 を超えるシンボル (関数/グローバル変数) を持つ共有オブジェクトを考えてみますが、ライブラリ ユーザーがアクセスできるパブリック関数はそのうちの 100 のみでした。 100 個の関数のみを他のユーザーに表示することができ、残りの 9,900 個のシンボルは非公開にします。

また、再配置テーブルには 100 シンボルの情報しか含まれないため、共有オブジェクトのサイズを縮小するためにも使用できます。このフラグを -ffunction-sections -fdata-sections とともに使用する これらの 100 個のシンボルに関連する定義を持つことで、共有オブジェクトのサイズをさらに削減します。


Linux
  1. サブシェルで変数が表示されるのはなぜですか?

  2. C++ で C 関数を呼び出す方法、C で C++ 関数を呼び出す方法 (C と C++ の混合)

  3. C++:どの正規表現ライブラリを使用すればよいですか?

  1. C++ブーストASIOの単純な定期タイマー?

  2. C++ は Linux ディストリビューション名\バージョンを取得します

  3. C、C++ で Windows または Linux を検出

  1. Ls -fによって表示される記号は何を意味しますか?

  2. Linux – Linuxの非特権ユーザーには、環境変数が表示されますか?

  3. C++ コマンド ライン インターフェイス