【发布时间】:2019-11-01 11:40:58
【问题描述】:
在我的项目中,我首先从文件夹A 编译aa_1.c、aa_2.c...,然后从文件夹B 编译bb_1.c bb_2.c...。然后我使用gcc-ar 生成libapps.a。最后,我与其他静态库链接。
现在我想计算文件夹A 的text、rodata、data 和bss 部分。
我的方法是执行gcc-nm -S --size-sort folder/*.o,并累加text、rodata、data和bss部分。但是某些函数可能会被优化掉,因为它们从未被调用过。
那么我如何计算text、data、rodata 和bss 的大小?
我还有一个问题,使用gcc-nm -S --size-sort a.o 没有'b' 类型。但是使用 gcc-size a.o 显示 bss 部分是 8 个字节。那么哪个是对的呢?
【问题讨论】:
-
看看
readelf -S。它将报告可用于计算大小的每个部分的地址。 -
But some functions may be optimized away because they're never called.- 您只知道 在 创建可执行文件时执行最终链接。因此,这样的计算必须在生成可执行文件后进行。
标签: c gcc static-libraries