欢迎来到天天文库
浏览记录
ID:43192283
大小:617.00 KB
页数:59页
时间:2019-10-02
《Linux第6章 常用开发工具》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第6章常用开发工具6.1概述Linux开发工作经常是在Linux用户决定共同完成一个项目时开始的。当开发工作完成后,该软件就被放到Internet站点上,任何用户都可以访问和下载它。大多数Linux软件是经过自由软件基金会(FreeSoftwareFoundation)提供的GNU(GNU即GNU’snotUNIX)公开认证授权的,因而通常被称作GNU软件。GNU软件免费提供给用户使用,并被证明是非常可靠和高效的。许多流行的Linux实用程序,如:C编译器、shell和编辑器都是GNU软件应用程序。6.2gcc编译系统目前,linux平台上最常用的
2、是C语言,其编译系统是gcc,能够编译用C,C++等语言编写的程序。一般来说,系统安装后就已经安装和设定好了gcc。在shell的提示符下键入gccv,屏幕上就会显示出目前正在使用的gcc的版本。6.2.1C语言编译过程C语言程序包括:源文件、头文件、库文件;在Linux系统中,C/C++程序编译命令是gcc;当使用gcc时,gcc会完成预处理、编译、汇编和连接;前三步生成目标文件,连接时把生成的目标文件链接成可执行文件;gcc可以针对不同的源程序文件进行不同处理,文件格式以文件的后缀来识别,常见的如表6.1所示。1.预处理阶段预处理是常规编译之前
3、预先进行的工作,故此得名。负责读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理,如:将“#include”所指出的文件替代该程序行,有两种格式:#include<文件名>—预处理程序在/usr/include目录下找文件#include“文件名”—首先在当前工作目录中找,然后到标准目录/usr/include中找;备注:使用gcc命令时设置选项,指定查找头文件时要优先搜索的目录。对C语言源程序中的宏名进行宏替换。例:#defineEOF-1预处理程序将程序中有EOF的部分以-1取代。宏定义:1.可以在C程序中:#definen
4、amevalue:如:#definestuname“Wang”2.也可以在gcc命令的选项中设置宏定义;如:gcc–Dname=definition第二种方式的优先级高于第一种方式,可以覆盖源文件中的定义。预处理程序对源程序进行“替换”之后,输出的文件就不包含宏定义、文件包含、条件编译等指令,与源文件功能相同,而形式不同。gcc命令的使用在Linux系统中,C/C++程序编译命令是gcc,例如:$gcc[options][filenames]其中filenames为所要编译的程序源文件;执行完成后,生成默认的可执行文件a.out;[options]
5、部分可以有较多取值,如:预处理选项、编译选项、优化选项、连接选项,使得gcc命令的功能很多。【例】gcc预处理选项$cathello.c#include“test1.h”#definevar1“callforhelp”main(){printf(“display–Dvariable%s”,DOPTION);printf(“displayoverwritevar1=%s”,var1);printf(“hello,everyone!”);}假设上述程序中,头文件test1.h存放在目录/temp中,且头文件里定义了变量var1,下面用gcc
6、命令对上述C程序进行编译,$gcchello.c则会提示找不到头文件test1.h,以及DOPTION未定义;宏定义$gcc–I/temphello.c因此,编译的时候要在gcc命令的选项里面,加入头文件test1.h的路径:此时,会提示:在gcc命令的选项里加入对DOPTION的宏定义:变量var1重定义、DOPTION未定义$gcc–I/temp–DDOPTION=”test”–Ehello.c只做预处理,比如:宏替换,用参数的取值替代宏名;不做编译,将结果显示在标准输出上。main(){printf(“display–Dvariable%s
7、n”,“test”);printf(“displayoverwritevar1=%s”,“callforhelp”);printf(“hello,everyone!”);}此时,若要用gcc命令编译并执行hello.c程序,则去掉-E选项,编译完成后,生成默认的可执行文件a.out$a.outdisplay–Dvariabletestdisplayoverwritevar1=callforhelphello,everyone!2.编译阶段对预处理之后的输出文件进行词法分析、语法分析,试图找出所有不符合语法规则的部分。并根据问题给出错误消息,
8、终止编译,或给出警告。当确定程序符合语法规则后,将其“翻译”为功能等价的中间代码,或汇编代码。3.汇编过程汇编程序(Ass
此文档下载收益归作者所有