El localizador es una herramienta experimental simple que intenta detectar símbolos que podrían localizarse dentro de su módulo, es decir, ser marcada como static o moverse a Anon. espacio de nombres.
La localización de símbolos es beneficiosa porque permite optimizaciones y previene la contaminación de la interfaz.
La herramienta funciona interceptando llamadas al enlazador y analizando las importaciones y exportaciones de símbolos.
Ejecute su script de compilación en find-locals.py script:
$ make clean
$ find-locals.py make -j10 all
Si quieres ignorar los símbolos que están presentes en los encabezados, haz
$ find-locals.py --ignore-header-symbols $PWD make ...
En muchos casos, los símbolos se exportan para que puedan usarse en pruebas unitarias, por lo que es posible que también deba construir pruebas:
$ find-locals.py 'make -j10 && make -j10 check'
Para obtener más opciones, ejecute find-locals.py -h .
Correr
$ test/run_tests.sh
Por diseño, la herramienta no puede detectar usos condicionales de símbolos que están ocultos en #ifdef s.
A veces, el compilador también es lo suficientemente inteligente como para optimizar las llamadas de funciones incluso si están presentes en el texto (por ejemplo, propagando argumentos constantes en funciones estáticas). Por esta razón, se recomienda ejecutar la herramienta en la compilación no optimizada , para deshabilitar la función de la función y la clonación. Para los proyectos habilitados para autotarols, simplemente lo hagan
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
Finalmente, no hay necesidad de informar los métodos de C ++ no utilizados, ya que no hay forma de localizarlos. Pero todavía hago esto porque no se pueden distinguir de los símbolos en los espacios de nombres que se pueden localizar (moviéndolos a Anon. Espacios de nombres).
Para apoyar la compilación cruzada, es posible que deba agregar un enlace simbólico al reticulador apropiado en bin/ directorio, por ejemplo,
$ ln -s ld aarch64-linux-gnu-ld