【发布时间】:2013-02-12 19:21:01
【问题描述】:
我试图更多地了解可执行文件的“公共”部分,我注意到在编译代码上执行objdump 时,我可以看到仅在目标文件上的公共代码中放置的变量 (*.o ) 不在可执行文件上。
这是为什么呢?
//test.c
int i[1000];
int main(){return 0;}
构建命令:
> gcc -g0 -fcommon -c test.c
> gcc -g0 -fcommon test.c
objdump 在符号表的公共部分显示i:
> objdump -x test.o
...
SYMBOL TABLE:
...
00000fa0 O *COM* 00000020 i
除非我在可执行文件上运行它:
> objdump -x a.out
...
SYMBOL TABLE:
...
0804a040 g O .bss 00000fa0 i
如果我使用-fno-common 标志重建目标文件,它会显示在.bss 段中,就像它在可执行文件上一样。最终的可执行文件没有这个“COMMON”部分吗?
【问题讨论】:
标签: c gcc objdump compiler-flags