linux编程基础

上传人:博****1 文档编号:431222667 上传时间:2022-09-09 格式:DOC 页数:27 大小:351.50KB
返回 下载 相关 举报
linux编程基础_第1页
第1页 / 共27页
linux编程基础_第2页
第2页 / 共27页
linux编程基础_第3页
第3页 / 共27页
linux编程基础_第4页
第4页 / 共27页
linux编程基础_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《linux编程基础》由会员分享,可在线阅读,更多相关《linux编程基础(27页珍藏版)》请在金锄头文库上搜索。

1、1 Linux编程基础对Linux的全面掌握并精通,个人认为至少应该掌握4部分内容,即操作系统级别上的各种操作、对Linux内核源码的剖析、Shell脚本编程以及在Linux上的编程。众所周知,Linux是通过C语言编写的,因此它对C/C+具有天生的良好支持,而且在Linux下使用C/C+编程的开发人员也比较庞大。本章主要讲述Linux下C/C+编程基础,它是深入学习Linux编程的前提,同时也介绍在Linux下使用其他语言编程,如Java、Perl等。本讲义主要包括以下部分: GNU C/C+编译器 GUN make工具 GNU调试器 常用IDE介绍 Linux上其他编程语言1.1 GNU

2、C/C+编译器1.1.1 GNU简介GNU的意思是“GNUs Not UNIX”单词的缩写,这种取名方式表现了一种幽默。在20世纪80年代初,Richard Stallman引发了一场软件业的革命。他将“自由软件”的思想向世人推广,认为软件应该是“平等自由”的,即发布软件的时候应该将其源码一起公布。好处是既可以让用户在源码的基础上按照自己的要求修改软件,更重要的是它能经过多人的代码优化,提高自身的质量,纠正软件的错误。GNU的确不是UNIX,它是一种有别于UNIX模式的计划,Linux便是这个计划的产物之一。Linux对用户不再有任何许可证方面的限制,遵守GNU的公共许可证(GNU Publi

3、cLicense,GPL)。按照GPL发行的软件是自由的,获得这个软件再转卖其他人是合法的,但是卖方必须将完整的源代码以及对它的任何增补都要转移给买方。当年Linus Torvalds发布Linux系统的时候,选择采用GPL制度来发行。由于Linux本身开放的特性,现在它已经拥有了数目可观的拥护者与开发人员。1.1.2 C/C+编译器开发人员使用某种编程语言编写好程序源代码,通过该语言的编译器可以编译为可执行的二进制目标文件,目标文件可以供用户将来执行使用。Linux上常用的开发语言便是C/C+,因此本节详细讲述C/C+编译器的用法。Linux上最常用的编译器是gcc,它是GNU的C/C+编译

4、器,实际上gcc能够编译3种语言,包括C、C+和Object C(C语言的一种面向对象扩展)。在Linux下,利用gcc命令可以同时编译并链接C和C+源程序。1. 安装gcc编译环境在安装RedHat 9过程中选择安装“开发工具”后,系统便会自动安装gcc编译环境。如果在安装系统时没有选择安装“开发工具”,则在RedHat图形界面选择“添加/删除应用程序”菜单项,如图1-1所示(以GNome方式下的图形界面为例)。图1-1 选择“添加/删除”程序菜单弹出如图1-2所示对话框,在该对话框内选择“开发工具”复选框,然后单击“更新”按钮,让系统自动从安装光盘上找到gcc编译环境需要的安装包,然后完成

5、gcc编译环境的安装。图1-2 选择“开发工具”选项当然,同样也可以在shell方式下安装gcc编译环境,只不过安装的过程中会提示安装具有依赖关系的库(通常为glibc),需要用户先手工依次安装这些库。使用shell方式适合没有安装光盘的情况,事先通过网络或者其他方式将安装gcc需要的包下载到本地硬盘上。首先,看一下没有安装gcc编译环境时,系统中带有“gcc”名称的rpm包,如图1-3所示为操作过程与结果。图1-3 系统中带有“gcc”名称的rpm包(安装gcc前)同理,查看系统没装gcc时与glibc有关的rpm包,如图1-4所示。图1-4 系统中带有“glibc”名称的rpm包(安装gc

6、c前)在shell方式下,通过以下命令可以查看到底gcc是否已经安装,具体操作如图1-5所示。图1-5 shell下查看是否安装有gcc编译器如图1-5所示,没有找到gcc命令,表示当前系统没有安装gcc编译器。通过网络下载得到的gcc的rpm包,使用rpm命令安装的过程中出现需要与该包依赖的某些库没有安装,则再下载这些库的rpm包,直到能够安装gcc包为止。通过rpm命令查看gcc包的操作如图1-6所示。图1-6 系统中带有“gcc”名称的rpm包(安装gcc后)同理,查看系统安装gcc后与glibc有关的rpm包,操作如图1-7所示。图1-7 系统中带有“glibc”名称的rpm包(安装g

7、cc后)此时,在使用gcc命令,得到如图1-8所示结果,表示gcc编译环境已经建立成功。图1-8 gcc安装成功2. gcc的基本使用方法在Linux下,使用gcc命令编译C/C+源文件,该命令与大多数Linux命令一样也可以带参数,甚至gcc命令带的参数更复杂。本部分只是通过一个简单的程序引导大家掌握gcc命令最基本的使用方法。假设一个程序只有一个源文件hello.c,其内容如图1-9所示。图1-9 hello.c源代码则只需键入gcc就可以编译、连接并生成一个可执行文件,具体操作如图1-10所示。图1-10 编译并执行hello.c第3行告诉gcc对hello.c进行编译,使用-o参数表示

8、编译链接后的输出文件名为hello。如果不使用-o参数,编译链接后的输出文件名一律为a.out。第6行表示执行可执行文件hello,第7行看到了hello程序执行的结果。3. gcc的实现机制用gcc编译的C/C+程序生成可执行文件看起来好像是一步就完成了,但实际上它要经历如下步骤:(1)预处理(Preprocessing):这一步需要分析各种命令,如#include、#define、#if等。gcc调用cpp程序来进行预处理工作。(2)编译(Compilation):根据用户输入文件产生汇编语言,由于通常是立即调用汇编程序,所以其输出一般不保存在文件中。gcc调用ccl程序进行编译工作。(3

9、)汇编(Assembly):将汇编语言作为输入,产生具有.o扩展名的目标文件。gcc用as程序进行汇编工作。(4)链接(Linking):各个目标文件.o被放在可执行文件的适当位置上,该程序引用的函数也放在可执行文件中(对使用共享库的程序稍有不同)。gcc调用链接程序ld来完成最终的任务。gcc是怎样知道如何处理某种特殊类型的文件呢?它是依靠文件的扩展名来决定如何正确处理该文件的。表1-1给出了gcc识别的最常用文件扩展名以及含义。表1-1gcc对文件扩展名的解释扩展名类型.cC语言源代码.C,.ccC+语言源代码.i预编译后的C语言源代码.ii预编译后的C+语言源代码.S,.s汇编语言源代码

10、.o编译后的目标代码.a,.so编译后的库代码4. gcc常用参数gcc命令的可选参数相当巨大,选项长度可以达数页,在表1-2中列出最常用的部分。表1-2gcc命令常用参数扩展名类型-o FILE指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,默认输出文件名为a.out-c只编译不链接-DFOO=BAR在命令行定义预处理宏FOO,其值为BAR-IDIRNAME将DIRNAME加入到包含文件的搜索目录列表中-LDIRNAME将DIRNAME加入到库文件的搜索目录列表中-static链接静态库,执行静态链接。默认情况下gcc只链接共享库-IFOO链接名为libFOO的

11、函数库-g在可执行程序中包含标准调试信息-ggdb在可执行程序中包含只有GNU debugger(gdb)才能识别的大量调试信息-O优化编译过的代码-ON指定代码优化级别为N,0=N=3,如果未指定N,则默认级别为1-ansi支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突部分(但一选项并不能保证生成ANSI兼容的代码)-pedantic允许发出ANSI/ISO C标准列出的所有警告-pedantic-errors允许发出ANSI/ISO C标准列出的所有错误-traditional允许Kernighan&Ritchie C语法(如用旧式语法定义函数)-w关闭所有的警告

12、-Wall允许发出gcc能提供所有的有用警告。也可以使用-W来标记指定的警告-werror把所有警告转换为错误,以在警告发生时中止编译过程-MM输出一个make兼容的相关列表-v显示在编译过程的每一步中用到的命令常用选项举例:(1)已经在/home/ta/include下保存了自定义的头文件,为了让gcc能够找到它们,使用-I参数,如下:gcc myapp.c I /home/ta/include o myapp(2)使用自己编写的位于/home/ta/lib下的库,名称为libnew.so,可以使用如下命令:gcc myapp.c L /home/ta/lib lnew o myapp(3)

13、最常用的带参数gcc命令如下:gcc myapp.c L /home/ta/lib I /home/ta/include lnew o myapp(4)使用静态链接libexample库进行链接,例如:gcc myapp.c lexample static o myapp警告和错误选项以及优化选项不常用,暂不给出例子。调试选项举例:错误不可以避免,在gcc命令中使用-g选项可以设定最后的结果产生多少调试信息。gcc编译环境一共包括3个标准级别,通过-g1、-g2和-g3的形式来设定。默认的级别是2(-g2),此时产生的调试信息包括扩展的符号表、行号以及局部或外部变量的信息。这些信息全部保存在二

14、进制文件中。3级调试信息包括所有的2级信息和源代码中定义的所有宏。1级产生的信息最少,只够创建回溯和堆栈转储之用。回溯:一个程序调用函数的历史。堆栈转储是一个通常以原始的16进制格式保存程序执行环境内容的列表,列表内容主要是CPU寄存器和分配给程序的内存。1级调试不产生局部变量和行号的调试信息。在gcc命令中使用-ggdb选项也可以设定调试信息,而且-ggdb选项比起-g选项更复杂,功能更强大。特定体系结构选项,-mcpu=CPU TYPE与-mvalue等价,指定默认CPU指令调度。例如,-m386与-mcpu=i386等价。1.2 Makefile规则在Linux系统上的很多软件都是使用m

15、ake程序和Makefile文件来实现自动编译的,Makefile文件的出现大大提高了编译器的编译效率以及避免了重复编译现象。1.2.1 使用Makefile的目的make程序最初设计是为了维护C/C+程序文件防止不必要的重新编译。在使用命令行编译器(如gcc)的时候,修改了一个工程中的头文件,如何确保包含这个头文件的所有文件都得到编译,而其他不包含该头文件的源文件不必重复编译呢?在模块之间相互引用头文件的情况下,要将所有需要重新编译的文件找出来是一件痛苦的事情。实际上这些工作可以让make程序来自动完成,make工具对于维护一些具有相互依赖关系的文件特别有用,它对文件和命令的联系(在文件改变时调用更新与之依赖的其它文件的程序)提供一套编码方法。Make工具的基本概念类似于Proglog语言,你告诉make需要做什么,提供一些规则,make来完成剩下的工作。1.2.2 GNU Make简介make工作自动确定工程的哪部分需要重新编译,执行命令去编译它们。虽然make多用于C程序,然而只要提供命令行

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号