·从程序员的角度看,只需简单地执行一条 GCC命令就可以了,但从编译器的角度来 看,却需要完成一系列非常繁杂的工作。 首先,GCC需要调用预处理程序cpp,由 它负责展开在源文件中定义的宏,并向其 中插入“# include”语句所包含的内容;接 着,GCC会调用cc和as将处理后的源代码 编译成目标代码;最后,GCC会调用链接 程序ld,把生成的目标代码链接成一个可执 行程序
• 从程序员的角度看,只需简单地执行一条 GCC命令就可以了,但从编译器的角度来 看,却需要完成一系列非常繁杂的工作。 首先,GCC需要调用预处理程序 cpp,由 它负责展开在源文件中定义的宏,并向其 中插入“#include”语句所包含的内容;接 着,GCC会调用ccl和as将处理后的源代码 编译成目标代码;最后,GCC会调用链接 程序ld,把生成的目标代码链接成一个可执 行程序
·为了更好地理解GCC的工作过程,可以把上述编 译过程分成几个步骤单独进行,并观察每步的运 行结果。第一步是进行预编译,使用-E参数可以 让GCC在预处理结束后停止编译过程: #f gcc-E hello c-o hello. i 此时若查看 hello. cpp文件中的内容,会发现 stdio h的内容确实都插到文件里去了,而其它应 当被预处理的宏定义也都做了相应的处理
• 为了更好地理解GCC的工作过程,可以把上述编 译过程分成几个步骤单独进行,并观察每步的运 行结果。第一步是进行预编译,使用-E参数可以 让GCC在预处理结束后停止编译过程: • # gcc -E hello.c -o hello.i • 此时若查看hello.cpp文件中的内容,会发现 stdio.h的内容确实都插到文件里去了,而其它应 当被预处理的宏定义也都做了相应的处理
下一步是将helo编译为目标代码,这可以 通过使用-c参数来完成: i gcc-c hello i-o hello. o GCC默认将文件看成是预处理后的C语言 源代码,因此上述命令将自动眺过预处理 步骤而开始执行编译过程,也可以使用×参 数让GCC从指定的步骤开始编译
• 下一步是将hello.i编译为目标代码,这可以 通过使用-c参数来完成: • # gcc -c hello.i -o hello.o • GCC默认将.i文件看成是预处理后的C语言 源代码,因此上述命令将自动跳过预处理 步骤而开始执行编译过程,也可以使用-x参 数让GCC从指定的步骤开始编译
最后一步是将生成的目标文件链接成可执 行文件: t gcc hello.o-o hello
• 最后一步是将生成的目标文件链接成可执 行文件: • # gcc hello.o -o hello
gcc编译器就会为我们生成一个helo的可 执行文件执行heo就可以看到程序的输 出结果了命令行中gcc表示我们是用gcc 来编译我们的源程序,0选项表示我们要求 编译器给我们输出的可执行文件名为 hello而 hello.c是我们的源程序文件
• gcc 编译器就会为我们生成一个hello的可 执行文件.执行./hello就可以看到程序的输 出结果了.命令行中 gcc表示我们是用gcc 来编译我们的源程序,-o 选项表示我们要求 编译器给我们输出的可执行文件名为 hello 而hello.c是我们的源程序文件