欢迎来到天天文库
浏览记录
ID:42770074
大小:19.53 KB
页数:5页
时间:2019-09-21
《GCC的编译流程详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、GCC的编译流程详解 在进行openvpn移植时,因为需要lzo库和openssl库的支持,而我又不想生成共享库,所以采取了静态编译的方式。但是在编译链接时错把-static理解是编译的参数了,实际上是对于编译和链接的概念还有点模糊。网友孤云为我举了一个例子,如下: (1)A=gcc B=-o-static (2)A=gcc-static B=-o A+B,对于结果,这两个是没有什么区别的,但是,A和B完全就不同了。为了深入理解C语言编译链接的整个流程,我结合华清远见的Linux下的C语言编程基础,实践
2、之后认识就深刻多了。 一、首先,先对Linux下C语言开发的流程有个大体的了解。简单的说,就是: 1、编写C程序源代码*.c 2、预处理(Pre-Processing) 3、编译(Compiling) 4、汇编(Assembling)-->生成目标代码*.o 5、链接(Linking)-->生成可执行文件 6、调试 其中,第一步工作用编辑器来实现,用Emacs、Vi(m)都可以。我现在习惯用Vim。在RedHat9.0中,Vim版本为6.1,系统采用alias用vi作为vim的别名,因此在shell提示符下输入vi实际上使用的编辑器vim(ViIMpro
3、ved)。你可以使用which查看一下: [armlinux@lqmprogram]$whichvialiasvi='vim' /usr/bin/vim 除去第6步的工作由GDB之类的调试器来完成,中间的四步工作都是由GCC来完成的。 二、下面大体了解一下GCC。---------------------------------------标准·ANSIC:这一标准是ANSI(美国国家标准局)于1989年制定的C语言标准。后来被ISO(国际标准化组织)接受为标准,因此也称为ISOC。ANSIC的目标是为各种操作系统上的C程序提供可移植性保证,而不仅仅限于UNIX。该
4、标准不仅定义了C编程语言的语发和语义,而且还定义了一个标准库。这个库可以根据头文件划分为15个部分,其中包括:字符类型()、错误码()、浮点常数()、数学常数()、标准定义()、标准I/O()、工具函数()、字符串操作()、时间和日期()、可变参数表()、信号()、非局部跳转()、本地信息()、程序断言()等等。·POSIX:该标准
5、最初由IEEE开发的标准族,部分已经被ISO接受为国际标准。该标准的具体内容见1.1.3。POSIX.1和POSIX.2分别定义了POSIX兼容操作系统的C语言系统接口以及shell和工具标准。这两个标准是通常提到的标准。·SVID:SystemV的接口描述。SystemV接口描述(SVID)是描述AT&&;TUnixSystemV操作系统的文档,是对POSIX标准的扩展超集。·XPG:X/Open可移植性指南。X/Open可移植性指南(由X/OpenCompany,Ltd.出版),是比POSIX更为一般的标准。X/Open拥有Unix的版权,而XPG则指定成为Unix操作系统必须满足的要
6、求。--------------------------------------- GCC是GNUCC的简称,它是符合上述ANSIC标准的编译系统,能够编译C、C++、ObjectC等语言编写的程序。GCC还是一个交叉平台编译器,能够在当前CPU平台为多种不同架构的硬件平台开发软件,因此适合嵌入式领域的开发编译。 GCC所支持的后缀名的解释.cC原始程序.C/.cc/.cxx C++原始程序.m ObjectC原始程序.i 已经过预处理的C原始程序.ii 已经过预处理的C++原始程序.s/.S 汇编语言原始程序.h 预处理文件(头文件).o 目标文件.a/.so 编译后的库文件
7、三、详解GCC编译流程 使用vi编写源文件hello.c。 #includeintmain(){ inti; for(i=1;i<9;i++) printf("HelloWorld%dtimes!",i); return0;} 1、预处理阶段 该阶段的作用是把预处理文件,也就是头文件编译进来。在此例中,就是要把stdi
此文档下载收益归作者所有