Localizer ist ein einfaches experimentelles Werkzeug, das versucht, Symbole zu erkennen, die in ihrem Modul lokalisiert werden können, dh als static oder in Anon bewegt werden. Namespace.
Die Lokalisierung von Symbolen ist von Vorteil, da sie Optimierungen ermöglicht und die Verschmutzung der Schnittstelle verhindert.
Das Tool bewirkt, dass Anrufe an Linker abfangen und Symbolimporte und Exporte analysieren.
Führen Sie Ihr Build-Skript unter find-locals.py Skript aus:
$ make clean
$ find-locals.py make -j10 all
Wenn Sie Symbole ignorieren möchten, die in den Kopfzeilen vorhanden sind, tun Sie dies
$ find-locals.py --ignore-header-symbols $PWD make ...
In vielen Fällen werden Symbole exportiert, damit sie in Unit -Tests verwendet werden können, sodass Sie möglicherweise auch Tests erstellen müssen:
$ find-locals.py 'make -j10 && make -j10 check'
Weitere Optionen finden Sie in find-locals.py -h .
Laufen
$ test/run_tests.sh
Durch Design kann das Tool die bedingte Verwendung von Symbolen nicht erkennen, die unter #ifdef s verborgen sind.
Manchmal ist Compiler auch klug genug, um Funktionsaufrufe zu optimieren, auch wenn sie im Text vorhanden sind (z. B. durch Ausbreitung konstanter Argumente in statische Funktionen). Aus diesem Grund wird empfohlen, das Tool für nicht optimiertes Build auszuführen, um die Funktionen für die Funktion und das Klonen von Funktionen zu deaktivieren. Für Autotools-fähige Projekte tun Sie es einfach
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
Schließlich müssen nicht genutzte C ++ - Methoden melden, da es keine Möglichkeit gibt, sie zu lokalisieren. Aber ich mache dies immer noch, weil sie nicht von Symbolen in Namespaces unterschieden werden können, die lokalisiert werden können (indem sie in Anon. Namespaces bewegt werden).
Um die Cross bin/ Compilation zu unterstützen
$ ln -s ld aarch64-linux-gnu-ld