Localizer adalah alat eksperimental sederhana yang mencoba mendeteksi simbol yang dapat terlokalisasi dalam modul mereka yaitu ditandai sebagai static atau dipindahkan ke Anon. namespace.
Lokalisasi simbol bermanfaat karena memungkinkan optimisasi dan mencegah polusi antarmuka.
Alat ini berfungsi dengan mencegat panggilan ke linker dan menganalisis impor dan ekspor simbol.
Jalankan skrip build Anda di bawah find-locals.py Script:
$ make clean
$ find-locals.py make -j10 all
Jika Anda ingin mengabaikan simbol yang ada di header, lakukan
$ find-locals.py --ignore-header-symbols $PWD make ...
Dalam banyak kasus, simbol diekspor sehingga dapat digunakan dalam tes unit sehingga Anda mungkin perlu membangun tes juga:
$ find-locals.py 'make -j10 && make -j10 check'
Untuk opsi lebih lanjut, jalankan find-locals.py -h .
Berlari
$ test/run_tests.sh
Dengan desain alat ini tidak dapat mendeteksi penggunaan bersyarat simbol yang disembunyikan di bawah #ifdef s.
Kadang -kadang kompiler juga cukup pintar untuk mengoptimalkan panggilan fungsi bahkan jika ada dalam teks (misalnya dengan menyebarkan argumen konstan ke dalam fungsi statis). Karena alasan ini disarankan untuk menjalankan alat pada build yang tidak dioptimalkan , untuk menonaktifkan fungsi inlining dan kloning. Untuk proyek yang diaktifkan secara autotools, lakukan saja
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
Akhirnya, tidak perlu melaporkan metode C ++ yang tidak digunakan karena tidak ada cara untuk melokalkannya. Tapi saya masih melakukan ini karena mereka tidak dapat dibedakan dari simbol di ruang nama yang dapat dilokalisasi (dengan memindahkannya ke anon. Namespaces).
Untuk mendukung kompilasi silang, Anda mungkin perlu menambahkan symlink ke cross-linker yang sesuai di bin/ direktori misalnya
$ ln -s ld aarch64-linux-gnu-ld