编译时为什么这个琐碎的程序如此之大?

Cor*_*ein 11 c++ ubuntu compilation

我创建了一个包含以下行的文件:

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

编译完之后,我惊讶地发现这个简单程序的二进制文件是8328字节!这里发生了什么,这个8328字节的二进制文件在世界上是什么?当然,这个程序可以用几行程序表示.

注意:我用以下行编译了这个:

g++ main.cpp
Run Code Online (Sandbox Code Playgroud)

我的g ++版本是 g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

Fre*_*Foo 29

这个二进制文件有很多:

  • 一个标题,使二进制自我描述(尝试file在其上运行)
  • 一个符号表,该strip工具将为您删除(或链接gcc -s)
  • 你从不使用的共享库的名称和位置(我的盒子中有五个;尝试lddstrings工具)
  • 加载这些库并设置了启动代码argcargv,然后调用main
  • 关闭代码,返回main操作系统的返回值.

对于漫画效果,请尝试静态链接该程序,其中二进制文件将包含通常动态链接到DLL的函数.(但是,此选项将简化部署)