第七讲inux下C语言编程-基础知识
第七讲 linux下C语言编程--基础知识
源程序的编译 在 Linux下面,如果要编译一个c语言源 程序我们要使用GNU的gcc编译器.下面 我们以一个实例来说明如何使用gcc编译 器
• 源程序的编译 • 在Linux下面,如果要编译一个C语言源 程序,我们要使用GNU的gcc编译器. 下面 我们以一个实例来说明如何使用gcc编译 器
开放、自由和灵活是 Linux的魅力所在,而 这一点在GCC上的体现就是程序员通过它 能够更好地控制整个编译过程。在使用 GCC编译程序时,编译过程可以被细分为 四个阶段: ◆预处理(Pre- Processing ◆编译( Compiling) 汇编( Assembling) ·◆链接 ( Linking
• 开放、自由和灵活是Linux的魅力所在,而 这一点在GCC上的体现就是程序员通过它 能够更好地控制整个编译过程。在使用 GCC编译程序时,编译过程可以被细分为 四个阶段: • ◆ 预处理(Pre-Processing) • ◆ 编译(Compiling) • ◆ 汇编(Assembling) • ◆ 链接(Linking)
GCc起步 ·在学习使用GCC之前,下面的这个例子能够帮助 用户迅速理解GCC的工作原理,并将其立即运用 到实际的项目开发中去。首先用熟悉的编辑器输 入清单1所示的代码: 清单1: hello. c ·# include“ stdio.h int main(void) printf Hello world, Linux programming !n); return o
GCC起步 • 在学习使用GCC之前,下面的这个例子能够帮助 用户迅速理解GCC的工作原理,并将其立即运用 到实际的项目开发中去。首先用熟悉的编辑器输 入清单1所示的代码: • 清单1:hello.c • #include “stdio.h” • int main(void) • { • printf ("Hello world, Linux programming!\\n"); • return 0; • }
然后执行下面的命令编译和运行这段程序 t gcc hello. c-o hello it /hello Hello world, Linux programming!
• 然后执行下面的命令编译和运行这段程序: • # gcc hello.c -o hello • # ./hello • Hello world, Linux programming!
·从程序员的角度看,只需简单地执行一条 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是我们的源程序文件