O localizador é uma ferramenta experimental simples que tenta detectar símbolos que podem localizar dentro de seu módulo, ou seja, ser marcado como static ou movido para o ANON. espaço para nome.
A localização dos símbolos é benéfica porque permite otimizações e evita a poluição da interface.
A ferramenta funciona interceptando chamadas para o vinculador e analisando importações e exportações de símbolos.
Execute seu script de construção em script find-locals.py :
$ make clean
$ find-locals.py make -j10 all
Se você quiser ignorar símbolos que estão presentes nos cabeçalhos, faça
$ find-locals.py --ignore-header-symbols $PWD make ...
Em muitos casos, os símbolos são exportados para que possam ser usados em testes de unidade, para que você também precise criar testes:
$ find-locals.py 'make -j10 && make -j10 check'
Para mais opções, execute find-locals.py -h .
Correr
$ test/run_tests.sh
Por design, a ferramenta é incapaz de detectar usos condicionais de símbolos ocultos em #ifdef s.
Às vezes, o compilador também é inteligente o suficiente para otimizar as chamadas de função, mesmo que estejam presentes no texto (por exemplo, propagando argumentos constantes em funções estáticas). Por esse motivo, é recomendável executar a ferramenta em compilação não otimizada , para desativar a função inline e clonagem. Para projetos habilitados para autotools, apenas fazem
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
Finalmente, não há necessidade de relatar métodos C ++ não utilizados, pois não há como localizá -los. Mas ainda faço isso porque eles não podem ser distinguidos dos símbolos em namespaces que podem ser localizados (movendo -os para anon. Namespaces).
Para apoiar a compilação cruzada, você pode precisar adicionar um symblink ao reticulador apropriado no bin/ diretório, por exemplo
$ ln -s ld aarch64-linux-gnu-ld