Localizerは、モジュール内にローカライズできるシンボルを検出しようとするシンプルな実験ツールであり、 staticとしてマークされるか、Anonに移動します。名前空間。
シンボルのローカリゼーションは、最適化を可能にし、インターフェイス汚染を防ぐため、有益です。
このツールは、リンカーへの呼び出しを傍受し、シンボルのインポートとエクスポートを分析することにより機能します。
find-locals.pyスクリプトの下でビルドスクリプトを実行します:
$ make clean
$ find-locals.py make -j10 all
ヘッダーに存在するシンボルを無視したい場合は、
$ find-locals.py --ignore-header-symbols $PWD make ...
多くの場合、シンボルがエクスポートされているため、単体テストで使用できるため、テストを作成する必要がある場合があります。
$ find-locals.py 'make -j10 && make -j10 check'
その他のオプションについては、 find-locals.py -hを実行します。
走る
$ test/run_tests.sh
設計上、ツールは#ifdef sの下に隠されているシンボルの条件付き使用を検出できません。
コンパイラは、テキストに存在している場合でも、機能コールを最適化するのに十分なほど賢い場合があります(例えば、一定の引数を静的関数に伝播することによって)。このため、最適化されていないビルドでツールを実行して、関数のインランスとクローニングを無効にすることをお勧めします。 AutoTools対応プロジェクトについては、ただ実行します
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
最後に、未使用のC ++メソッドをローカライズする方法がないため、報告する必要はありません。しかし、私はまだこれを行います。なぜなら、それらは、局所的にできる名前空間のシンボルと区別できないからです(それらをAnonに移動することによって)。
相互コンパイルをサポートするには、 bin/ディレクトリの適切なクロスリンカーにSymlinkを追加する必要がある場合があります。
$ ln -s ld aarch64-linux-gnu-ld