実行可能ファイルの「共通」セクションについてもっと理解しようとしていますがobjdump、コンパイルされたコードで実行すると、実行可能ファイルではなくオブジェクトファイル()にのみ共通コードに配置された変数が表示されることに気付きまし*.oた。
何故ですか?
//test.c
int i[1000];
int main(){return 0;}
ビルドコマンド:
> gcc -g0 -fcommon -c test.c
> gcc -g0 -fcommon test.c
objdumpiシンボルテーブルの共通セクションに表示されます。
> 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」セクションがありませんか?