Le localisateur est un simple outil expérimental qui essaie de détecter les symboles qui pourraient localiser dans leur module, c'est-à-dire être marqués comme static ou déplacés vers Anon. Espace de noms.
La localisation des symboles est bénéfique car elle permet les optimisations et empêche la pollution de l'interface.
L'outil fonctionne en interceptant les appels vers Linker et en analysant les importations et les exportations de symboles.
Exécutez votre script de construction sous find-locals.py Script:
$ make clean
$ find-locals.py make -j10 all
Si vous souhaitez ignorer les symboles qui sont présents dans les en-têtes, faites
$ find-locals.py --ignore-header-symbols $PWD make ...
Dans de nombreux cas, les symboles sont exportés afin qu'ils puissent être utilisés dans les tests unitaires afin que vous puissiez également créer des tests:
$ find-locals.py 'make -j10 && make -j10 check'
Pour plus d'options, exécutez find-locals.py -h .
Courir
$ test/run_tests.sh
Par conception, l'outil n'est pas en mesure de détecter les utilisations conditionnelles des symboles qui sont cachés sous #ifdef s.
Parfois, le compilateur est également suffisamment intelligent pour optimiser les appels de fonction même s'ils sont présents dans le texte (par exemple en propageant des arguments constants en fonctions statiques). Pour cette raison, il est recommandé d'exécuter l'outil sur la construction non optimisée , de désactiver la fonction d'inclinaison et de clonage. Pour les projets compatibles AutoTools
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
Enfin, il n'est pas nécessaire de signaler les méthodes C ++ inutilisées car il n'y a aucun moyen de les localiser. Mais je le fais toujours parce qu'ils ne peuvent pas être distingués des symboles dans des espaces de noms qui peuvent être localisés (en les déplaçant vers Anon. Espaces de noms).
Pour prendre en charge la compilation croisée, vous devrez peut-être ajouter un lien symbolique à la réticulation appropriée en bin/ répertoire, par exemple
$ ln -s ld aarch64-linux-gnu-ld