Localizer
1.0.0
本地化器是一種簡單的實驗工具,它試圖檢測可能位於其模塊中的符號,即將其標記為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 s下的符號的條件使用。
有時,編譯器也足夠聰明,可以優化函數調用,即使它們存在於文本中(例如通過將恆定參數傳播到靜態函數中)。因此,建議在不優化的構建上運行該工具,以禁用函數內置和克隆。對於支持自動工具的項目,只需做
$ ./configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
最後,由於無法本地化,因此無需報告未使用的C ++方法。但是我之所以這樣做,是因為它們不能與可以定位的名稱空間中的符號區分開(通過將其移至anon。名稱空間)。
為了支持交叉補償,您可能需要在bin/目錄中添加一個符號鏈接到適當的交聯鏈接器
$ ln -s ld aarch64-linux-gnu-ld