文档介绍:Linux C 编程
简述
陈锺
GCC
最基本的开发环境必须具备C语言的支持能力,C作为一种编译型的高级语言,这就是说运行C程序之前要将其先编译成可执行的由机器指令构成的执行程序,因此就需要使用一个编译器来对C源代码进行处理,Linux使用的是GNU的C编译器。GCC作为当前最流行的、支持平台数量最多的编译器,其性能和效率也非常之好。
按照C语言的****惯,:
$ cat
main()
{
   printf(“Hello, world!\n”);
}
简单的编译过程如下:
$ cc
$ ./
Hello, world!
,可以使用-o参数指出生成的执行文件名。
事实上前面的编译生成执行文件的过程由两步组成,一是生成目标文件,,然后进行连接生成执行文件。
因此,可以使用ar将多个目标文件组合成一个函数库文件,而可以使用nm来查看库文件的内容。
$ cc -c
$ cc -c
$ ar c
$ nm
是一种非常流行的,多平台、高效率的C语言编译器,它提供了多种选项用于生成应用软件。以下为常用的一些选项:
-L
定义连接库文件的目录
-I
定义C源码的头文件的目录
-o
后面跟的参数为要生成的执行文件的名
-O
进行编译优化,可以指定使用不同的优化级别,从O2到O6,每个不同的级别使用的优化设置不同。
相关的选项还有定义生成的指令码类型的参数,如-m486生成486指令,版本()不支持Pentium代码。
-g
加入调试代码,可以在完成后使用strip命令删除用于调试的信息
-c
仅仅进行编译而不进行连接,生成目标文件
-fPic
生成相对地址的代码,可用于最后生成动态连接库
-static
强制生成静态连接的程序
-aout
、目标代码等,缺省使用ELF格式
-elf
,生成ELF格式的目标和执行代码
可以通过命令行参数查看当前使用的GNU C编译器的版本:
$ cc -version
Gcc version
编译器的最新版本,因为有时候最新版本的软件不可避免的有些小问题。当然,,这可是一个有趣的联系。
调试器(比如象GDB)能让你观察另一个程序在执行时的内部活动,或程序出错时
发生了什么。
GDB主要能为你做四件事(包括为了完成这些事而附加的功能),帮助你找出程序
中的错误。
* 运行你的程序,设置所有的能影响程序运行的东西。
* 保证你的程序在指定的条件下停止。
* 当你程序停止时,让你检查发生了什么。
* 改变你的程序。那样你可以试着修正某个bug引起的问题,然后继续查找另一
个bug.
你可以用GDB来调试C和C++写的程序。(参考*C 和C++)
现在拿一个操作系统的进程调度原码来说明把。
。
先说明一下如何取得包括原代码符号的可执行代码。的
man文件(在shell下打man gcc)。gcc -g <> -o <要生成的文件名>
-g 的意思是生成带原代码调试符号的可执行文件。
-o 的意思是指定可执行文件名。
(gcc 的命令行参数有一大堆,有兴趣可以自己去看看。)
。
-g -o os,产生的可执行文档叫os.
然后打gdb os,就可进入gdb,屏幕提示:
GDB is free software and you are e to distribute copies
of it under certain conditions; type \"show copying\" to see
the conditions.
There is absolutely no warranty for GDB; type \"show warranty\"
for details.
GDB , Copyright 1995 Free Software Foundation, Inc...
(gdb)
(gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是q/Q)
为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。
首先我们可以设置gdb的屏幕大小。键入: