Linux下Gcc编译器的编译与调试

作者:知识的海洋  发布日期:2011-07-26 18:44:54

       Linux下C语言编程环境

        编辑器:Vi,Emacs。由编辑器编写的代码称为源代码。

        编译链接器:GCC编译器。编译是指源代码转化生成可执行代码的过程。

        调试器:Gdb。

        项目管理器

       Vi编辑器

        行编辑器Ed, Ex。全屏幕编辑器Vi,Emacs。

        Vi的模式:命令行模式、插入模式。初次进入Vi是命令行模式,输入i进入插入模式。由Esc命令返回命令行模式。

        编辑完成返回到命令行模式,输入:w表示对修改的部分保存,输入:wq表示保存文件并退出,:q退出Vi,并会对修改的文件给出提示,:q!强行退出,对修改的文件不保存。:w [filename]将编辑的文件另存为名为filename的文件,:set nu,设置行,set nonu,取消行。

      Emacs编辑器

       GCC编译器

        查看gcc版本信息:gcc –v。

        不同后缀名表示的文件类型

 

后缀名

对应的语言

后缀名

对应的语言

.c

C语言源程序

.s/.S

汇编语言原始程序

.C/.cc/.cxx

C++原始程序

.h

预处理文件(头文件)

.m

Objective-C原始程序

.o

目标文件

.i

预处理后的C原始程序

.a/so

编译后的库文件

.ii

预处理后的C++原始文件

 

 

 

        GCC编译流程

Gcc指令格式:Gcc [选项] 要编译的文件 [选项][目标文件]

下面以如下代码为例子:命名为test.c

#include <stdio.h>

int main()

{

       printf(“Hello! This is our embedded world\n”);

       return 0;

}

      预处理

在该阶段将上述的stdio.h编译进来,使用 –E进行查看,并且让Gcc在预处理结束后停止编译。

gcc –E test.c [–o test.i]

      编译阶段

在该阶段检查代码的规范性、是否有语法错误等,检查无误后翻译成汇编语言,使用-S选项来查看,该选项只进行编译不进行汇编。

gcc –S test.i [–o test.s]

      汇编阶段

该阶段是将编译阶段生成的.s文件转成目标文件,使用选项-c可看到汇编代码已经转化成为.o的二进制目标代码了。

gcc –c test.s [–o test.o]

      链接阶段

在成功编译之后,就进入链接阶段。在这里会涉及:函数库。

gcc test.o –o test


        Gcc编译选项

      前面提到了一些选项,如-E、-S、-c、-o等,下面介绍一些其他的。

      -I dir:Linux头文件默认放到/usr/include/目录下,当希望添加放置在其他地方的头文件时,通过-I dir选项来指定。

      -L dir:在dir目录中搜索库文件。-I和-L都只是指定目录,不包含文件。

       Gdb调试器

        编译程序时,必须将选项-g,这样编译得到的可执行文件中才包含调试信息。

gcc –g test.c –o test;test是可执行文件。

        gdb调试的是可执行文件,而不是源文件。

        gdb test进入调试

      输入l(小写的L)就可以查看源文件。

      设置断点:是使得程序到该位置就暂停运行。

        按行设置断点:语法:”b + 行号”.

        函数断点:语法:b + 函数名  b sum

        条件断点:语法:b + 行号或函数名if 表达式,如 b 8 if i==10

      查看断点情况:info  b。

      运行代码:r。

      查看变量值: p + 变量名 即可。

      单步运行:n、s;两者的区别为:s可以进入函数,而n不会。

      恢复程序运行:c.

        gdb基本命令

      help命令,通过这个命令也可以查找其他的命令。

        Gdb中修改运行参数命令

在单步执行的过程中,键入命令  set 变量=设定值。之后,程序就按设定的值运行了。

       make工程管理器

        makefile基本结构

makefile是Make读入的惟一配置文件。其包含的内容有:

      目标体(target):通常是目标文件或可执行文件

      创建每个目标体所依赖的文件(dependency_files)

      创建每个目标体时需要运行的命令(command)

      格式为:

target: dependency_files

       command(注意:command前必须要有一个Tab键)

例子makefile文件:

hello.o: hello.c  hello.h

            gcc –o hello.o –c hello.c

然后执行make target就可以了。

        makefile变量

      make中的变量使用格式均为:$(VAR)

        makefile常见自动变量

      $*:不包含扩展名的目标文件名称

      $+:所有依赖文件,以空格分开

      $<:第一个依赖文件的名称

      $?:所有时间戳比目标文件晚的依赖文件,并以空格分开

      $@:目标文件的完整名称

      $^:所有不重复的依赖文件,以空格分开

     $%:如果目标是归档文件,则该变量表示目标的规定成员名称

Tag标签: Linux   编译器   编译   调试  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规