4.Linux程序设计基础—gcc_第1页
4.Linux程序设计基础—gcc_第2页
4.Linux程序设计基础—gcc_第3页
4.Linux程序设计基础—gcc_第4页
4.Linux程序设计基础—gcc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux程序设计基础程序设计基础gcc使用使用gccgcc的简介的简介 n 编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言n 一个交叉平台编译器, 适合在嵌入式领域的开发编译n 全称为GNU Compiler Collection, GNU项目中符合ANSI C标准的编译系统n gcc可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理预处理链接编译汇编源 程 序(*.c)可执行文件预处理器编译器汇编器连接器gccgcc的四个阶段的四个阶段n 命令gcc首先调用cpp进行预处理,在预

2、处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。n 接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。n 汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S或.s为后缀的汇编语言源代码文件汇编之后都生成以.o为后缀的目标文件。n 当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的函数库中连到合适的地方。 gccgcc版本历史版本历史可执行文件格式 n Linux系统中可执

3、行文件有两种格式。 第一种格式是a.out格式,这种格式用于早期的Linux系统以及 Unix系统的原始格式。a.out来自于Unix C编译程序默认的可执行文件名。当使用共享库时,a.out格式就会发生问题。把a.out格式调整为共享库是一种非常复杂的操作。 因此,一种新的文件格式被引入Unix系统5的第四版本和Solaris系统中。它被称为可执行和连接的格式(ELF)。这种格式很容易实现共享库。 ELF格式已经被Linux系统作为标准的格式采用。 ELF(Executable and Linking Format )n gcc编译程序产生的所有的二进制文件都是ELF格式的文件(即使可执行文

4、件的默认名仍然是a.out)。较旧的a.out格式的程序仍然可以运行在支持ELF格式的系统上。 gccgcc的使用的使用n 基本语法 gcc options filenamesn 说明: 在gcc后面可以有多个编译选项,同时进行多个编译操作。很多的gcc选项包括一个以上的字符。因此你必须为每个选项指定各自的连字符。例如,下面的两个命令是不同的: gcc -p -g test1.c gcc -pg 当你不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件。 Gcc所支持的后缀名解释n .c C源程序n .C/.cc/.cxx c+源程序n .m Objecti

5、ve-C原始程序n .i 经过预处理的C原始程序n .ii 经过预处理的C+原始程序n .s/.S 汇编语言原始程序n .h 预处理文件(头文件)n .o 目标文件n .a/.so 编译后的库文件gcc选项n -o选项 你能用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out。 例:gcc o count -c选项:告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤。 例:gcc c -E 不生成文件,只输出预处理结果(输出终端)。 n -S 编译选项告诉 gcc 在为 C 代码产生了汇编语言文件后停止编译。n -g 产生调试工具gdb所必要的符号信息,要想对编译出的

6、程序调试,就必须加入这个选项。 n -Wall 提示更多警告信息警告选项警告选项n 在gcc中用开关-Wall控制警告信息,使用示例命令如下: gcc Wall -o test3_1 test3_ -w 不生成任何警告信息。 查找选项n gcc一般使用默认路径查找头文件和库文件。如果文件所用的头文件或库文件不在缺省目录下,则编译时要指定它们的查找路径。 -I选项:指定头文件的搜索目录例:gcc I/export/home/st o test1 test1.c -L选项:指定库文件的搜索目录例:gcc L/usr/X11/R6/lib o test1 test1.c与库和路径相关选项n -I d

7、ir 在dir这个目录寻找被include的文件n -L dir 在dir这个目录寻找被-I的库n -l name 链接库文件文件名为libname.a 或libname.so的库-fpic或-fPIC 产生位置无关的目标代码,以构造共享库(share library)-static 禁止与共享库链接,若没有,则优选选择共享库链接-shared 产生共享库,在创建共享函数库 时使用多个源文件生成一个可执行文件多个源文件生成一个可执行文件 问题:有多个源文件时,如何生成一个可执行文件?n 方法1:gcc o mytest test1.c test2.c 方法2:gcc -c test1.cgcc

8、 c test2.c gcc c test3.c gcc o mytest test1.o test2.o test3.o优化选项优化选项 n 优化选项可以使GCC在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可执行文件。这些选项中最典型的是-O和-O2选项。 -O0 不进行优化处理。 -O选项:告诉GCC对源代码进行基本优化。源代码会在编译,连接过程中进行优化处理。 -O2选项:告诉GCC 产生尽可能小和尽可能快的代码。-O2选项将使编译的速度比使用-O时慢。但通常产生的代码执行速度会更快。 -O3选项:比 -O2 更进一步优化,包括 inline 函数。 版本选项n -v选项 用户

9、将会得到自己目前正在使用的gcc的版本及与版本相关的一些信息。 gcc -v 将得到如下结果: Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs gcc version 2.7.2n -V 选项 如果安装了多个版本的gcc,并且想强制执行其中的某个版本,可以用命令通知系统用户要使用的版本。 gcc -V2.6.3 -v静态库与动态库静态库与动态库n 静态库:在编译过程中将库函数代码直接加入到生成的可执行程序中,程序运行过程中不需要利用库函数n 共享库:编译时,只是在生成的可执行程序中简单指定需要使用库函数信息,程序运行过程中需要利用库函数n 动态库:共享库的一种变化形式,目前大都采用共享库的方式n 命名方式: 静态库:前缀lib+库名+.a(libm.a,libstdc+.a等) 共享库:前缀lib+库名+.so+版本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论