最常见的是,静态库链接并不真正具有每个符号的粒度。它具有每成员对象文件粒度。
的
例:
</强>
如果静态库包含文件:
a.o
foo
bar
b.o
baz
</code>
和一个未定义的引用
foo
需要解决,
a.o
将被带入,并随之而来
bar
符号也是。
使用时,可以获得每个符号粒度的效果
-ffunction-sections
-fdata-sections
然后链接
-Wl,—gc-sections
(gc代表垃圾收集),但请记住编译器/链接器选项是特定于gcc / clang的,并且它们具有一些较小的性能/代码大小成本。
-ffunction-sections
将每个函数放在它自己的部分(有点像它自己的目标文件)和
-fdata-sections
对外部可见的全局变量做同样的事情。
-Wl,—gc-sections
然后导致垃圾收集器像往常一样链接目标文件后运行,垃圾收集器删除所有无法访问的部分(=&gt;符号)。
(
-ffunction-sections
如果你想要也很有用
size -A the_objectfile.o
给你功能大小,如果你也想要那些功能大小
根据功能的位置(由于对齐要求)不会略微波动。)