考虑以下用ANSI C编写的程序。
file: test.c
main() {}
我在Windows 7上。我使用MinGW编译此文件。
$ gcc test.c
然后,我想看看这个文件的大小。
$ ls -la a.exe
-rwxr-xr-x 1 Username Administrators 47902 Nov 21 15:57 a.exe
看起来这个完全空的,毫无价值的C程序编译成大约五十千字节的二进制文件。为什么世界会发生这种情况?
答案 0 :(得分:6)
像gcc -v test.c
一样运行GCC。 GCC(编译器驱动程序)产生cc1
(编译器),as
(汇编程序)和ld
(链接程序)。查看链接器命令行,您将看到最终可执行文件中链接的多个文件(如crti.o
,crt0.o
,crtbegin.o
,crtend.o
等)。其中一些人可能会从libgcc.a
或libc.a
获取符号。这就解释了为什么大小不只是几个字节。
您还可以使用-Wl,-Map=map.txt
运行它来生成一个映射文件,该文件将显示每个对象和库中的每个函数或变量,它包含在最终的可执行文件中。