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