基于Linux的C编程(一)

一、GCC概述

1、GCC概述

一个c/c++程序从开始编码到生成二进制可执行文件至少要经过四个步骤。

  (1)预处理:对源文件的宏进行展开。

  (2)编译:将源程序编译成汇编文件。

  (3)汇编:将汇编文件编译成机器码。

  (4)链接:将目标文件和外部符号进行链接,生成可执行文件。

GCC在编译时根据输入文件类别和参数选项,可以分别完成上述四个步骤,产生对应的处理文件,也可以一次性完成所有步骤,直接生成可执行文件。

下面是一些GCC文件扩展名规范: 

  (1).c为后缀的文件,是C语言源代码文件。

  (2).h为后缀的文件,是头文件。

扫描二维码关注公众号,回复: 4209020 查看本文章

  (3).C,.cc,.cpp,.cp或.cxx为后缀的文件,是c++源代码文件。

  (4).h为后缀的文件,是程序所包含得而头文件。

  (5).i为后缀的文件,是已经预处理过的C源代码。

  (6).ii为后缀的文件,是已经预处理过的c++源代码文件。

  (7).m为后缀的文件,是object-c源代码文件。

  (8).o为后缀的文件,是编译后的目标文件。

  (9).s为后缀的文件,是汇编语言源代码。

  (10).S为后缀的文件,是经过预编译的汇编语言源代码文件。

2.GCC使用方法

在使用GCC编译器的时候,我们必须给出一系列必要的参数选项和文件名称。

GCC最基本的用法是:gcc [options] [filenames]

其中options就是编译器需要的选项,filenames给出相关的文件名称。下面介绍基本的几个常用选项:(假设源程序文件名为test.c)

(1)无选项编译链接

  用法:gcc  test.c

  作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out

(2)选项-o

  用法:gcc test.c -o test

  作用:将test.c预处理、汇编、编译并廉洁成可执行文件test。-o选项用来指定输出文件的文件名。

(3)选项-E

  用法:gcc -E test.c -o test.i

  作用:将test.c预处理输出test.i文件。

(4)选项-S

  用法:gcc -S test.i

  作用:将预处理输出文件test.i汇编成test.s文件

(5)选项 -c

  用法:gcc -c test.s

  作用:将汇编输出文件test.s编译输出test.o文件。

(6)无选项链接

  用法:gcc test.o -o test

  作用:将编译输出文件test.o链接成最终可执行文件。

(7)选项-O

  用法:gcc -O test.c -o test

  作用:使用编译优化级别编译程序。级别为1-3,级别越大优化效果越好,但编译时间越长。

(8)多源文件的编译方法

如果有多个源文件,基本上有两种编译方法(假设有两个源文件为test.c和testfun.c)

1、多个文件一起编译

  用法:gcc testfun.c test.c -o test

  作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2、分别编译各个源文件,之后对编译后输出的目标文件链接。

  用法:gcc -c testfun.c   //将testfun.c编译成testfun.o

       gcc -c test.c       //将test.c编译成test.o

       gcc -o testfun.o test.o -o test  //将testfun.o和test.o链接成test

以上两种方法相比较,第一种方法编译时需要所有的文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

3、c程序调试

c程序的调试分为静态调试和动态调试。静态调试用在程序编译阶段查错并修正错误,它主要利用GCC编译器对语法错误的检查进行排错。

动态调试则用在程序运行阶段的错误检查与修正,适用于检查算法的错误、输入输出的错误等。

程序的动态调试需要借助调试工具,Linux系统包含了一个叫gdb(GNU DeBugger)的GNU调试工具。gdb是是一个用来调试C和C++程序的调试器,是一个交互式工具,工作在字符模式下。以下是gdb所提供的一些功能:

  (1)设置断点。

  (2)监视程序变量的值。

  (3)程序的单步执行。

  (4)修改变量的值。

  为了使gdb正常工作,必须使用-g选项编译源文件,使程序在编译时包含调试信息。在命令行上键入gdb并按回车键就可以运行gdb。

进入gdb环境后,就可以输入相应的命令对程序进行调试。

  (1)file:装入想要调试的可执行文件。

  (2)kill:终止正在调试的程序。

  (3)list:查看指定文件或者函数的源代码,并标出行号。

  (4)next:单步执行,但不进入函数内部。

  (5)step:单步执行而且进入函数内部。

  (6)run:执行当前被调试的程序。

  (7)quit:退出gdb环境。

  (8)watch:监视一个变量的值而不管它何时被改变。

  (9)print:查看变量或表达式的值。

  (10)break:在代码里设置断点,这将使程序执行到这里时被挂起。

  (11)make:不退出gdb就可以重新产生可执行文件。

  (12)Shell:不离开gdb就执行Shell命令。

猜你喜欢

转载自www.cnblogs.com/RanWhoo/p/10012486.html
今日推荐