在我们刚接触C语言时,会发现老师教的都是安装打开一个C语言的IDE,然后教如何创建工程、如何编译代码、如何运行代码,但是老师并没有讲编译的过程到底经历了那些工作。 GCC的最基本用法是: test.c文件内容如下: 编译: GCC的编译流程分为四个步骤: hello的演变过程: 通过命令: 方法二,用汇编器从汇编代码生成目标代码: gdb是调试运行错误的,对于语法错误不能进行调试。 不积小流无以成江河,不积跬步无以至千里。而我想要成为万里羊,就必须坚持学习来获取更多知识,用知识来改变命运,用博客见证成长,用行动证明我在努力。
C语言诞生于美国的贝尔实验室,由D.M.Ritchie以B语言为基础发展而来,在它的主体设计完成后,Thompson和Ritchie用它完全重写了UNIX,且随着UNIX的发展,C语言也得到了不断的完善。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由 。
GCC现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器。所以通过gcc这个编译器来了解程序编译经历了,是很不错的!GNU工具
GCC简介
后缀名
解释程序类型
.c
C原始程序
.C/.cc/.cxx
C++原始程序
.m
Objective-C原始程序
.i
已经过预处理的C原始程序
.ii
已经经过处理的C++原始程序
.s/.S
汇编语言原始程序
.h
预处理文件(头文件)
.o
目标文件
.a/.so
编译后的库文件
编译器的主要组件
GCC的基本用法和选项
gcc [options] [filenames]
GCC的错误类型及对策
错误信息:文件source.c中第n行语法错误(systex error)。有些情况下,一个简单的语法错误,gcc会出一大堆错误,我们要保持头脑清醒,不要被吓到!
错误信息:找不到头文件head.h(Can not find include file head.h)。这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误的使用双引号和尖括号。
错误信息:链接程序找不到所需的函数库(ld:-lm:No such file or directory)。这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。
错误信息:有未定义的符号(Undefined symbo1)。这类错误是在连接过程中出现的,可能有两种原因:一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪–个函数库中,确定之后,修改gcc连接选项中的-1和-L项。GCC初体验
#include<stdio.h> int main() { int i,j; j=0; i=j+1; printf("hello,worldn"); printf("the result is %dn",i); }
$ gcc -o test test.c
执行:$ ./test
查看更详细的的信息:$ gcc -v -o test test.c
GCC编译过程
1、预处理(Pre-Processing)
2、编译(Compiling)
3、汇编 (Assembliang)
4、链接(Linking)
新建一个hello.c的文件,文件内容如下:#include<stdio.h> #include<math.h> #define N 20 #define _DEBUG_ int main(int argc,const char*argc[]) { double m=615,n; m+=N; n=sqrt(m); #ifdef _DEBUG_ printf("debug:m=%lf n=%lfn",m,n); #else printf("debug:m=%lf n=%lfn",m,n); return 0; }
$ gcc -E hello.c -o hello.i
ls -l
可以查看对比两个文件
可以发现hello.i比hello.c增加了不少内容,主要是放在系统提供的include文件中的。这里需要注意的是预处理后生成的hello.i依旧是一个C程序,有语法错误也发现不了 !
检查语法错误,并生成汇编文件$ gcc -S hello.c -o hello.s
方法一,用gcc直接从C源代码中生成目标代码:$ gcc -c hello.s - o hello.o
$ as hello.s -o hello.o
将目标文件链接库资源,生成可执行程序$ gcc hello.s -o hello ./hello
调试器
GDB调试流程
作用
参数
查看文件
(gdb)l
设置断点
(gdb) b 6
查看断点情况
(gdb)info b
运行代码
(gdb)r
查看变量值
(gdb)p n
单步运行
(gdb)n/(gdb) s
恢复程序运行
(gdb)c
帮助
(gdb) help [command]
GDB调试
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“” “评论” “”
一键三连哦!听说的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算