0.引言
对于平常的应用程序开发,我们很少需要关注编译和链接过程,因为通常的开发环境都是
流行的集成开发环境(IDE),比如 Visual Studio、Delphi等。这样的IDE一般都将编译和链
接的过程一步完成,通常将这种编译和链接合并到一起的过程称为构建(Build)。即使使用命令
行来编译一个源代码文件,简单的一句“gcc hello.c”命令就包含了非常复杂的过程。
IDE和编译器提供的默认配置、编译和链接参数对于大部分的应用程序开发而言已经足够使
用了。但是在这样的开发过程中,我们往往会被这些复杂的集成工具所提供的强大功能所迷惑,很
多系统软件的运行机制与机理被掩盖,其程序的很多莫名其妙的错误让我们无所适从,面对程序运行
时种种性能瓶颈我们束手无策。我们看到的是这些问题的现象,但是却很难看清本质,所有这些问
题的本质就是软件运行背后的机理及支撑软件运行的各种平台和.工具,如果能够深入了解这些机制,
那么解决这些问题就能够游刃有余,收放自如了。
1.被隐藏了的过程
C语言的经典,“Hello World”程序几乎是每个程序员闭着眼睛都能写出的,编译运行通过一气呵成,
基本成了程序入门和开发环境测试的默认的标准。
#include <stdio.h>
int main ( )
{
printf { "Hello world\n" );
return 0 ;
}
在Linux 下,当我们使用GCC来编译Hello World程序时,只须使用最简单的命令
(假设源代码文件名为hello.c):
$gcc hello.c
$./a.out
Hello world