المترجم هو أداة تجريبية بسيطة تحاول اكتشاف الرموز التي يمكن أن تُحدد داخل الوحدة النمطية ، أي أن يتم تمييزها على أنها static أو نقلها إلى Anon. مساحة الاسم.
تعريب الرموز مفيد لأنه يتيح التحسينات ويمنع تلوث الواجهة.
تعمل الأداة عن طريق اعتراض المكالمات على Linker وتحليل واردات الرموز والصادرات.
قم بتشغيل برنامج Build Script تحت برنامج 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 s.
في بعض الأحيان يكون المترجم ذكيًا أيضًا بما يكفي لتحسين مكالمات الوظائف حتى لو كانت موجودة في النص (على سبيل المثال عن طريق نشر الوسائط الثابتة في وظائف ثابتة). لهذا السبب ، يوصى بتشغيل الأداة على البناء غير المحسّن ، لتعطيل الوظيفة التي تضم واستنساخ. للمشاريع التي تدعم Autotools فقط
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
أخيرًا ، ليست هناك حاجة للإبلاغ عن أساليب C ++ غير المستخدمة حيث لا توجد وسيلة لتوطينها. لكنني ما زلت أفعل ذلك لأنه لا يمكن تمييزها عن الرموز في مساحات الأسماء التي يمكن ترجمةها (عن طريق نقلها إلى Anon. مساحات الأسماء).
لدعم التثبيت المتقاطع ، قد تحتاج إلى إضافة ترابط إلى الرابط المتقاطع المناسب في bin/ directory على سبيل المثال
$ ln -s ld aarch64-linux-gnu-ld