Linux 版 (精华区)

发信人: jonny (san), 信区: Linux
标  题: 第25章 修改内核(3/3)
发信站: 紫 丁 香 (Mon Aug 24 15:03:11 1998), 转信


                    使用 Linux 的 C 编译器

    Linux 对内核(和大部分应用程序)的所有操作都使用一个 C 编译器。
所有版本的 Linux 都有的 C 编译器是 GNU C 编译器,短小的 gcc。这个
编译器是在 Free Software Foundation 的规划许可下创建的,因此免费
发行。Slackware Linux版本中的 GNU C 编译器是和 ANSI C 兼容的
编译器。如果你熟悉不同操作系统或硬件平台的 C 编译器,你将能很快学会 
如何使用 gcc。
    GCC编译器的调用通过传递许多选项和一个或多个文件名来完成。gcc的
基本语法如下:
        gcc [选项] [文件名]
    命令行选项中指定的操作对命令行中的所有文件都起作用。有100多个的
编译器选项可以传递给 gcc。你可能永远不会使用其中的大部分选项,但有
一些你会经常用到。

                    编译选项

    许多 gcc选项包含不止一个字符。因此,你必须为每一项使用一个连字号。
你不能像使用大多数 Linux 命令时那样将连字号后的选项合并成在一起。
例如,下列的两个命令是不同的:
        gcc -p -g test.c
        gcc -pg   test.c
    第一个命令告诉 gcc用配置信息(profile information)(-p)
编译 test.c,并将调试信息存为可执行的(-g)。第二个命令告诉 gcc对
gprof 命令用配置信息(-pg)。
    当你用 gcc 不带任何命令行选项编译程序时,它创建一个可执行文件
(假设编译成功的话)名为 a.out。你可以用 -o 编译器选项指定这个名字
而不用 a.out。例如,想将一个名为 count.c的 C 程序文件编译为一个
名为 count 的可执行文件,可用下面的命令:
        gcc -o count count.c
和前面的例子中的一样,可执行文件名必须紧跟在命令行中 -o 的后面。
    其他的编译器选项使你指定编译进行的程度。-c选项告诉 gcc 跳过汇编
和链接阶段将程序编译成目标代码。这个选项很常用,因为这样包含多个文件的
C 程序编译得更快且更易于管理。用 gcc 创建的缺省目标代码文件为 a.o。
    -S选项告诉 gcc 在产生了汇编文件后停止编译。缺省时,汇编文件名为
a.s。-E选项指导编译器只进行预处理。使用这个选项时,预处理器的输出被
送到标准输出而不是存入一个文件。
    当你用 gcc 编译 C 代码时,它将尽快地编译源代码并尽量生成易于调试
的代码。使代码易于调试意味着编译过的代码的顺序和源代码的顺序相同,并且
在编译之外没有代码被优化。有许多选项可以用来创建更小、运行更快的可执行
程序,当然这是以牺牲编译时间和调试的容易程度为代价的。在这些选项中,
两个最常用的是 -O和-O2选项。
    -O选项告诉 gcc对源代码作基本的优化。这些优化选项使代码在大多数
情况下运行得更快。-O2选项告诉 gcc将代码编译为代码量尽可能小、能运行
得尽可能快的代码。-O2选项使编译速度比用-O选项更慢,但典型地,它使代码
执行得更快。
    除了-O和-O2选项外,你可用许多低级选项来使代码更快。这些选项针对
性很强,只有在你完全理解这些选项对编译代码的影响后才能使用。要想知道
这些选项的详细描述,请参照 gcc 手册。

                    调试和配置选项

    gcc编译器支持许多调试和配置选项。在这些选项中,两个你最可能用到
的是 -g 选项和 -pg 选项。
    -g选项告诉 gcc 生成 GNU 调试器(gdb)能用来帮助你调试你的程序
的调试信息。gcc程序提供一个许多其他 C 编译器没有的特性。你可以将-g
选项和 -O 选项(生成优化代码的选项)合起来使用。如果你想调试与最终
产品中的代码最相像的代码,这个特性将非常有用。当你将这两个选项合起来
使用时,注意,gcc可能会在作优化时改变一些你写的代码。
    -pg选项告诉 gcc 添加一些在执行时能产生 gprof 程序用来显示你的
程序的定时信息的代码。

                    用 gdb 调试 gcc 程序

    Linux 中包括GNU调试程序gdb。你可以用 gdb 调试器来调试 C和
C++程序。它使你能看到程序的内部结构或程序执行时的占用的内存。调试程序
使你能执行下列的功能:
    #   监视程序中变量的值
    #   设置断点使程序执行到特定的代码行时停下来
    #   单步执行代码
    当你启动 gdb 时,你能指定许多命令行选项。你可能会这样运行gdb:
       gdb 文件名
    当你用这种方式调用 gdb 时,你指定了你想调试的可执行程序。你可以
用 gdb 来观察由正在被检测的执行文件创建或将 gdb 作为当前运行进程的
核心文件。如果想得到其他每一个选项的清单和简单描述,可以参照 gdb 
手册或在命令行输入 gdb -h。
    要使 gdb 运行正常,你必须编译你的程序让编译器生成调试信息。生成
的调试信息包括你的程序中的每一个变量的类型和在可执行程序中的地址与在
源代码中的行号。gdb 调试程序使用这些信息来关联可执行代码和源代码。编译
一个带调试信息的程序,使用 -g 编译器开关。

                    小结

    当你理解了你所进行的每一个步骤后,编译内核代码,并将新特性加入
内核中的工作将进展顺利。不要让这个过程给吓住了,不过手中始终应该有一个
启动盘。当新软件有特殊东西要链入内核或取代原先的系统时,如果有说明,
就按照说明来。

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: dip9.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.987毫秒