Linux C 编程.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:34 大小:226KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Linux C 编程.doc

LinuxC编程.doc

预览

免费试读已结束,剩余 24 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

LinuxC编程简述陈锺GCC最基本的开发环境必须具备C语言的支持能力,C作为一种编译型的高级语言,这就是说运行C程序之前要将其先编译成可执行的由机器指令构成的执行程序,因此就需要使用一个编译器来对C源代码进行处理,Linux使用的是GNU的C编译器。GCC作为当前最流行的、支持平台数量最多的编译器,其性能和效率也非常之好。按照C语言的习惯,第一个程序通常为hello.c:$cathello.cmain(){printf(“Hello,world!\n”);}简单的编译过程如下:$cchello.c$./a.outHello,world!Linux下缺省使用a.out作为生成的文件名,可以使用-o参数指出生成的执行文件名。事实上前面的编译生成执行文件的过程由两步组成,一是生成目标文件,通常使用.o为后缀,然后进行连接生成执行文件。因此,可以使用ar将多个目标文件组合成一个函数库文件,而可以使用nm来查看库文件的内容。$cc-cf1.c$cc-cf2.c$arcmlib.af1.of2.o$nmmlib.aLinux使用的C语言编译器gcc是一种非常流行的,多平台、高效率的C语言编译器,它提供了多种选项用于生成应用软件。以下为常用的一些选项:-L定义连接库文件的目录-I定义C源码的头文件的目录-o后面跟的参数为要生成的执行文件的名-O进行编译优化,可以指定使用不同的优化级别,从O2到O6,每个不同的级别使用的优化设置不同。相关的选项还有定义生成的指令码类型的参数,如-m486生成486指令,缺省的gcc版本(2.7.2)不支持Pentium代码。-g加入调试代码,可以在完成后使用strip命令删除用于调试的信息-c仅仅进行编译而不进行连接,生成目标文件-fPic生成相对地址的代码,可用于最后生成动态连接库-static强制生成静态连接的程序-aout生成a.out格式的执行文件、目标代码等,缺省使用ELF格式-elf3.0之后为缺省设置,生成ELF格式的目标和执行代码可以通过命令行参数查看当前使用的GNUC编译器的版本:$cc-versionGccversion2.7.2.1Linux当前使用GNU的C编译器有时候不是gcc编译器的最新版本,因为有时候最新版本的软件不可避免的有些小问题。当然,使用者完全可以自己手工升级到最新版本的gcc,这可是一个有趣的联系。二.GDB调试器(比如象GDB)能让你观察另一个程序在执行时的内部活动,或程序出错时发生了什么。GDB主要能为你做四件事(包括为了完成这些事而附加的功能),帮助你找出程序中的错误。*运行你的程序,设置所有的能影响程序运行的东西。*保证你的程序在指定的条件下停止。*当你程序停止时,让你检查发生了什么。*改变你的程序。那样你可以试着修正某个bug引起的问题,然后继续查找另一个bug.你可以用GDB来调试C和C++写的程序。(参考*C和C++)现在拿一个操作系统的进程调度原码来说明把。首先这个程序叫os.c是一个模拟进程调度的原程序。先说明一下如何取得包括原代码符号的可执行代码。大家有心的话可以去看一下gcc的man文件(在shell下打mangcc)。gcc-g<原文件.c>-o<要生成的文件名>-g的意思是生成带原代码调试符号的可执行文件。-o的意思是指定可执行文件名。(gcc的命令行参数有一大堆,有兴趣可以自己去看看。)反正在linux下把os.c用以上方法编译连接以后就产生了可供gdb使用的可执行文件。我用gcc-gos.c-oos,产生的可执行文档叫os.然后打gdbos,就可进入gdb,屏幕提示:GDBisfreesoftwareandyouarewelcometodistributecopiesofitundercertainconditions;type\"showcopying\"toseetheconditions.ThereisabsolutelynowarrantyforGDB;type\"showwarranty\"fordetails.GDB4.16,Copyright1995FreeSoftwareFoundation,Inc...(gdb)(gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是q/Q)为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。首先我们可以设置gdb的屏幕大小。键入:(gdb)setwidth70就是把标准屏幕设为70列。然后让我们来设置断点。设置方法很简单:break或简单打b后面加行号或函数名比如我们可以在main函数上设断点:(gdb)breakmain或(gdb)bmain系统提示:Breakpo