编译器GCC使用

时间:2021-12-27 09:16:57

编译器GCC使用

1.GCC概述:

GCC(GNU C Compile)经过长时间已经发展成是支持C语言C++,java等众多语言的编译器

gcc的编译流程分为四步:1.预处理(pre-processing), 2.编译(Compiling),3.汇编(assembling). 4.链接(linking)

gcc 根据不同的后缀对他们程序进行分别处理,.c为C原始程序、.C/.cpp为C++语言程序,……

2.GCC编译分析:

gcc [option |filename]    option:编译选项 filename:要编译的文件名

现在我们编写一个最简单的程序hello.c

#include <stdio.h>

#include <stdlib.h>

main()

{

        printf("hello linux\n");

        return 0;

}

运行

#gcc hello.c -o hello

#./hello

屏幕上将打印 hello linux

 


介绍一下常用的 常用的编译选项

-o out_filename:可以确定生成的可执行的文件的文件名(若没有则编译出来时默认为a.out可执行文件)

-c : 只编译,而不连接成可执行文件,只是有.c文件生成.o文件

                                    编译器GCC使用

-g:产生调试工具所用的调试符号信息(如果所编译的程序想要调试就需要加-g)

-O, -O2,-O3: 优化编译连接 是执行的更迅速-O的优化<-O2的优化<-O3的优化(不加是默认是-O)这个只在你的程序已经确定没有错误,可以发布时才去进行优化平时就不用了

-staic静态编译(这里我把用静态编译的生成文件叫hello1)我来来与hello作个比较

编译器GCC使用

我们看到hello1要比hello大很多 用file看文件属性看到一个是静态编译一个是动态编译 静态编译时把所需的库添加在其中一起编译了所以要大很多(在嵌入式开发中如果没有指定动态库就要用-static来编译你的程序)

-l dir 指定头文件的位置

-L dir:知名文件库的路径

-lname: 编译时装载libname.a的库函数

例如要用到数学函数库 就要用 gcc -lm hanshu.c -o hanshu//因为要用到libm.a的函数库

调试工具gdb使用:

1.gdb概述:

   gdb也是有GNU发布的一款功能强大的程序调试工具

   主要完成:

       1.能运行程序,并设置运行的参数

       2.能够使程序在某条件下停住

       3.能够在程序停止调查程序状态

       4.能够根据所设的参数改变程序的运行

2.gdb调试应用:

编写一个test.c文件

#include<stdio.h>

#include<stdlib.h>

main()

{

         int t;

        long result = 0;

        for(i=1;i<100;i++)

        {

            result +=i;

        }

        printf("result = %d",result);

        return 0;

}

首先要用 gcc -g test.c -o test

产生一个可以调试的 test可执行文件

(1).启动gdb:         #gdb test 或者#gdb回车后加文件

 

 

 

 

 

 

(2).查看程序:   list(l)

编译器GCC使用

(3).设置断点:     break(b)行号--在制定行号添加断点   break(b) 函数名--在制定的函数入口设置断点  break(b) 行号 if条件--当条件为真时断点生效   info--查询所有设置的断点   delete编号--删除断点

编译器GCC使用

(4).运行程序:   run(r)

(5).单步运行:   next(n)-->不会进入子函数     step(s)-->回进入子函数

(6).继续运行程序:    continue(c)

(7).查看制定变量: print(p)变量名

(8).对制定变量进行监控:  watch 变量名

(9).退出:          quit(q)