Localizer เป็นเครื่องมือทดลองง่ายๆที่พยายามตรวจจับสัญลักษณ์ที่สามารถแปลได้ภายในโมดูลของพวกเขาคือการทำเครื่องหมายเป็นแบบ static หรือย้ายไปที่อานนท์ เนมสเปซ
การแปลสัญลักษณ์มีประโยชน์เนื่องจากช่วยให้การปรับให้เหมาะสมและป้องกันมลพิษส่วนต่อประสาน
เครื่องมือนี้ทำงานได้โดยการสกัดกั้นการโทรไปยัง Linker และวิเคราะห์การนำเข้าและส่งออกสัญลักษณ์
เรียกใช้สคริปต์บิลด์ของคุณภายใต้ find-locals.py script:
$ make clean
$ find-locals.py make -j10 all
หากคุณต้องการละเว้นสัญลักษณ์ที่มีอยู่ในส่วนหัวให้ทำ
$ find-locals.py --ignore-header-symbols $PWD make ...
ในหลายกรณีสัญลักษณ์จะถูกส่งออกเพื่อให้สามารถใช้ในการทดสอบหน่วยดังนั้นคุณอาจต้องสร้างการทดสอบเช่นกัน:
$ find-locals.py 'make -j10 && make -j10 check'
สำหรับตัวเลือกเพิ่มเติม Run find-locals.py -h
วิ่ง
$ test/run_tests.sh
โดยการออกแบบเครื่องมือไม่สามารถตรวจจับการใช้สัญลักษณ์ตามเงื่อนไขที่ซ่อนอยู่ภายใต้ #ifdef s
บางครั้งคอมไพเลอร์ก็ฉลาดพอที่จะเพิ่มประสิทธิภาพการเรียกใช้ฟังก์ชั่นแม้ว่าจะมีอยู่ในข้อความ (เช่นโดยการเผยแพร่อาร์กิวเมนต์คงที่ลงในฟังก์ชั่นคงที่) ด้วยเหตุนี้จึงแนะนำให้เรียกใช้เครื่องมือในการสร้าง ที่ไม่ได้ปรับ เพื่อปิดการใช้งานฟังก์ชั่นการ inlining และการโคลนนิ่ง สำหรับโครงการที่เปิดใช้งานอัตโนมัติเพียงแค่ทำ
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
ในที่สุดไม่จำเป็นต้องรายงานวิธีการ C ++ ที่ไม่ได้ใช้เนื่องจากไม่มีทางที่จะทำให้พวกเขามีการแปล แต่ฉันยังคงทำสิ่งนี้เพราะพวกเขาไม่สามารถแยกแยะได้จากสัญลักษณ์ในเนมสเปซซึ่ง สามารถ แปลได้ (โดยย้ายพวกเขาไปยังอานนท์เนมสเปซ)
เพื่อรองรับการรวบรวมข้ามคุณอาจต้องเพิ่ม symlink ลงใน cross-linker ที่เหมาะสมใน bin/ directory เช่น
$ ln -s ld aarch64-linux-gnu-ld