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 에 숨겨진 기호의 조건부 사용을 감지 할 수 없습니다.
때로는 컴파일러가 텍스트에 존재하더라도 (예 : 일정한 인수를 정적 함수로 전파함으로써) 함수 호출을 최적화 할 수있을 정도로 영리합니다. 이러한 이유로 최적화되지 않은 빌드에서 도구를 실행하여 기능을 비활성화하고 복제하는 기능을 비활성화하는 것이 좋습니다. Autotools 지원 프로젝트의 경우
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
마지막으로, 미사용 C ++ 메소드를 현지화 할 수있는 방법이 없으므로보고 할 필요가 없습니다. 그러나 나는 그것들이 네임 스페이스의 기호와 구별 될 수 없기 때문에 (Anon. 네임 스페이스로 옮기면 ) 여전히이 작업을 수행합니다.
교차 컴파일을 지원하려면 bin/ 디렉토리에서 적절한 가교제에 심볼 링크를 추가해야 할 수도 있습니다.
$ ln -s ld aarch64-linux-gnu-ld