红联Linux门户
Linux帮助

Linux世界驰骋----Linux常用实用工具

发布时间:2005-09-28 11:19:52来源:红联作者:linux_
来 源: 赛迪网技术天地-开放系统世界

Linux上有许多实用工具,常用的工具包括编译开发工具、文本编辑工具、办公套件、网络管理及安全等。本讲主要介绍Linux上常用的工具,有编译开发工具GCC、文本编译工具vi、办公套件OpenOffice、网络管理工具ARP、arpwatch、ifconfig、netstat和TCPDump,以及安全工具GnuPG和OpenSSH等。希望读者通过这些讲解对Linux的常用工具有一定的认识,并经过不断地实践,进而熟练地掌握它们。

编译开发工具

Linux系统下的GCC是自由软件基金会(Free Software Foundation)推出的多平台编译器,是一个开源软件,并且功能强大、性能优越,能够支持C、C++和FORTRAN等多种语言。同时,GCC还是一个交叉编译器,可以把源代码编译成在其它硬件平台上运行的可执行代码。用GCC编译后生成的代码与一般的编译器相比,平均执行效率要提高20%~30%。GCC的最新版本可以从网站http://gcc.gnu.org/上取得。

开放、自由和灵活是Linux的魅力所在,这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。在使用GCC编译程序时,编译过程可以细分为四个阶段:预处理(Pre-processing)、编译(Compiling)、汇编(Assembling)和链接(Linking)。

Linux程序员可以根据需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。

GCC提供了30多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。此外,GCC还对标准的C和C++语言进行了大量的扩展,提高了程序的执行效率,有助于编译器进行代码优化,减轻编程的工作量。

1.GCC的简单使用

下面举一个例子,帮助大家迅速理解GCC的工作原理,将其运用到实际的项目开发中去。首先用熟悉的编辑器输入下列代码:


hello.c:
#include
int main(void)
{
printf ("Hello world, Linux programming!\n");
return 0;
}




然后执行下面的命令编译和运行这段程序:


# gcc hello.c -o hello
# ./hello
Hello world, Linux programming!
文章评论

共有 14 条评论

  1. quickscan 于 2007-04-07 10:20:46发表:

    我在做一个关于在linux系统下实现文件加密的毕业论文,有几个问题想向你请教一下:gnupg可以用于中文加密吗?用gpg --gen-key命令后,可以自己定义公钥和私钥的名称吗?还有就是两台pc间可以互传公钥吗?[email=sxj1105@126.com]期待你的答复,谢谢

  2. redapp 于 2006-07-18 11:50:41发表:

    很详细

  3. ccs 于 2005-10-09 00:25:05发表:

    good

  4. linux_ 于 2005-09-28 11:25:45发表:

    2. OpenSSH

    许多网络应用程序,如telnet、rsh、rlogin或rexec,若用明文(Plain Text)传送口令和秘密的信息,可被利用连接到网络上的计算机监听应用程序和服务器之间的通信,获取口令和秘密信息。现在telnet应用对于日常的管理工作是必不可少的,但是它又是不安全的。于是,就有了OpenSSH,用它可以替代那些过时的、不安全的远程登录程序,如telnet、rlogin、rsh、rdist或rcp。

    SSH(Secure Shell)程序可以通过网络登录到远程主机,并执行命令。它提供了很强的安全验证能力,可以在不安全的网络中进行安全的通信。OpenSSH是它的免费版本。

    配置OpenSSH可以使之支持TCP-Wrappers(inetd超级服务器),这样能够进一步地提高安全性,而不必在后台运行OpenSSH守护进程(daemon)。当客户端程序提出连接请求的时候,TCP-Wrappers守护进程就会在连接重定向到OpenSSH之前,对连接请求进行验证和授权。

    OpenSSH是开源软件,而且使用不受专利保护的加密算法。因此,建议使用OpenSSH(免费并且修正了一些Bug),而不要使用SSH1(免费但是有Bug)和SSH2(现在使用商用的许可协议)。

    OpenSSH软件包的来源见OpenSSH的主页http://www.openssh.com。安装时,要用超级用户身份安装OpenSSH。限于篇幅,具体的安装过程可参见软件包的安装帮助文档,并用man命令查看OpenSSH使用说明。

    本讲介绍了部分常用的Linux实用工具,并给出了一些示例。Linux上还有其它很多工具,不管是Linux的开发者还是使用者,一旦熟练地掌握了这些工具,都可起到事半功倍的效果。

  5. linux_ 于 2005-09-28 11:25:30发表:

    (5)将公钥送上KeyServer。有时候将公钥分别寄给每个人是要花费很多时间的,尤其是当通讯簿中名单很多时,此时可以将公钥送至Key Server,这样会比较方便。Key Server是Internet上的数据库,里面放的就是公钥,供想要的人去查询。

    Internet上的Key Server有很多,而且有些会试着跟其它的Key Server联机同步更新。这里提供一个Key Server网址http://www.keyserver.net/,也可以自己架一个Key Server,或者找一个国内的来使用。

    将公钥匙送上Key Server的方法是:

    $ gpg --keyserver http://www.keyserver.net/ --send-key you@yourisp.net

    或者通过浏览器将自己的PGP公钥送出去。

    (6)汇入别人的公钥,即将别人的公钥加入自己的钥匙圈里。当汇入别人的公钥之后,就可以读取他人寄来的信件。当收到其它人寄来的公钥时,首先请将它存成文本文件;或者用浏览器连上Key Server,当找到想要的公钥时,将它存成文本文件。然后执行下面命令:


    $ gpg --import xxx.txt

    若没看到错误信息,就表示成功了。

    若想了解更多的信息,可以使用在线求助功能,执行下面命令或查询http://www.gnupg.org/


    $ man gpg

  6. linux_ 于 2005-09-28 11:24:47发表:

    安全工具

    1.GnuPG和GPG

    收发E-mail是Internet最常用的功能之一。事实上,一般网络信件是不经过编码处理的。“有心”人士只要从网络中拦截到信件,把信件拆开来看,就可知道信件的内容了。于是,有不少人发明了将信件编码的方法,使未经授权的人无法看到信件的内容,即使将信件从网络中拦截,所看到的也只是一团乱码。

    现在常用的方法是使用PGP(Pretty Good Privacy)编码,但由于这套编码受制于美国法律,使用起来会有一些限制,因此,GNU工程师重新写了一套编码系统,编码方法可兼容PGP,称为GPG(GnuPG)。

    GnuPG是一套用于安全通信的工具,可以完全取代PGP,并且是开源软件,可以免费使用。GnuPG不但能编码信件,能处理文件,还可以进行数字签名,以避免他人的窜改。GnuPG还能处理、验证由PGP 5.x编码的文件。

    GnuPG使用公开钥匙机制为使用者提供安全的资料交换能力。在公开钥匙的编码过程中,会产生两把钥匙:公钥和密钥。公钥是可以公开的,而密钥不可公开。由公钥编码的数据只能由相应的密钥解开,由密钥编码的数据也只能由公钥解开。

    由于编码的原理比较复杂,因篇幅有限此处不再详细解释,只讲解使用说明。有兴趣的读者可以参看GPG的网页 http://www.gnupg.org/

    GnuPG的使用步骤如下:

    (1)产生一副钥匙对。若要使用GPG,必须要产生一对钥匙:公钥和密钥。

    首先在命令行窗口执行下面命令:


    $ gpg --gen-key




    这时请用常用的账号,因密钥是给这个账号使用的,最好不要使用超级用户账号。系统通过交互过程生成钥匙,此钥匙被放置在Home的.gnupg目录下。

    (2)列出钥匙,可执行下面命令:


    $ gpg --list-keys9。




    (3)钥匙产生之后,就可以汇出自己的公钥和汇入他人的公钥(切记不要公开自己的密钥)。

    寄出自己的公钥使用如下命令:


    $ gpg --armor --export you@yourisp.net




    (4)废除认证。假如忘记了密码,或者有人发现了密码,可以发布消息说这个公钥不要使用了。要废除认证,可以使用--egn-revoke选项,执行下面命令:


    $ gpg --output revoke.asc --gen-revoke you@yourisp.net

  7. linux_ 于 2005-09-28 11:24:18发表:

    5.TCPDump

    如果发现网络存在异常流量、网络阻塞或怀疑网络受到攻击,可以使用TCPDump截获网络中传输的数据信息,并进行分析,以确定是什么类型的数据包及来源等。TCPDump是免费的、且功能强大的网络流量检测工具,它采用命令行方式执行。TCPDump可以显示出某段时间网络上流过数据包的报头(Header),当然只限于同一个域。Red Hat Linux 8.0/9.0的安装光盘中带有这个软件(tcpdump-3.7.2-1),可以方便地通过RPM或以源码编译的方式安装。

    不带参数执行TCPDump,截获的是通过第一个网络接口的数据包。

    # tcpdump

    TCPDump支持很多命令选项,可通过设置过滤规则得到所需数据,以便于分析。下面列出一些比较重要的选项:

    -l 将标准行输出放入缓冲。

    -c count 接收若干数据包后离开,count表示数据包的数目。

    -F file 从文件读取数据包的过滤规则。

    -i interface 转储(dump)某个接口(如eth0)的数据包。

    -n 不将IP转换成域名。

    -t 不要在每个转储的行上加盖时间戳(Timestamp)。

    -w file 将转储的资料存入文件。

    下面举几个例子。

    (1)监控某台主机(假设主机名为reddust)


    #tcpdump host reddust

    (2)监控reddust流出的数据包


    #tcpdump src host reddust

    (3)监控reddust和backtrue


    #tcpdump host reddust and backtrue

    (4)监控名为seasad网关(gateway)的FTP流量


    #tcpdump gateway seasad and port ftp

  8. linux_ 于 2005-09-28 11:23:29发表:

    4. netstat

    netstat是network status的缩写,它用来密切监测网络,是Linux上广受欢迎的网络调试工具之一。netstat工具可提供关于目前网络连接、路由选择及其它重要的网络状态信息。有不同的命令行选项来控制netstat不同的显示动作。

    netstat工具的主要功能有以下几类:

    ◆列出活跃的网络会话。

    ◆显示接口信息和统计数据。

    ◆显示路由选择表信息。

    ◆显示网络数据结构。

    该工具也提供了特定的关键字来控制操作及输出格式。下面列出一些主要的关键字用来控制显示何种数据结构:

    -i 显示网络接口参数和统计信息。

    -g 显示组播中组成员信息。

    -M 列出FTP中使用伪装(Masquerade)的会话。

    -N 显示netlink接口及其活动。

    -r 显示网络路由选择表。

    -t 显示活跃的TCP连接。

    -tcp 持续显示这些连接,直到被用户中断。

    -A 指定不同的地址族。关键字包括--unix、--ipx、--ax25、--netrom及-ddp。

    -c 持续显示输出,直到用户中断输出为止。

    -h 显示命令行的简要帮助信息。

    -n 显示数值信息(如IP地址)来替代解析的主机、端口或用户名。

    -p 显示进程名,以及列出网络socket标识符。

    -v 显示额外信息。

    可用-h选项调用netstat命令,以获得该工具的联机帮助:


    netstat -h

  9. linux_ 于 2005-09-28 11:23:07发表:

    3. ifconfig

    ifconfig命令用于摘要显示接口配置,并且可以用来配置本地网络接口。该命令一般在系统启动期间被调用,并用预定义的配置来设置每个接口。它也能在系统启动后改变网络接口参数。

    ifconfig命令可执行下面功能:

    ◆列出每个已定义的网络接口的配置。

    ◆启用/禁止任何一个已定义的网络接口。

    ◆修改网络接口配置参数。

    ◆创建伪接口。

    ifconfig命令提供了很多选项和关键字用于配置一个或多个接口。下面列出一些重要的选项和关键字,关键字作为一种修饰符与其它命令行选项一起使用。

    -a 应用到目前安装在系统上的所有接口。

    arp 在接口上启用地址解析协议(ARP)。-arp选项禁止使用ARP。

    promisc 在接口上启用杂凑(Promiscuous)模式,即侦听所有通信。-promisc禁止该模式。

    allmalti 使所有组播通信由接口接收。-allmulti选项禁止组播报文重复。

    broadcast 当给定参数时,为接口设置广播地址,该地址是网络层广播地址。-broadcast清除广播地址。 pointtopoint 为接口启用一个点到点模式(Point-to-Point)。假设两个设备之间存在一个专用链路,如果提供地址参数,则指定链路另一方的协议地址。用-pointtopoint关键字禁止点到点模式。 up 启动或激活接口。

    down 关闭或禁用接口。

    netmask 为接口设置IP网络掩码,参数可用255.0.0.0(十进制点分格式)形式或0xff000000(十六进制)形式。

    broadcast 为接口设置IP广播。可以使用与netmask关键字相同的格式表示地址参数。

    address 为接口设置IP地址,该地址必须是惟一的、未分配的IP地址。

  10. linux_ 于 2005-09-28 11:22:47发表:

    -n 用数值形式的地址代替主机名来显示。

    -s 创建一个ARP表项。

    -v 使用冗长模式显示ARP缓存。

    对于ARP命令,超级用户可以进行下面操作:

    ◆显示ARP缓存。

    ◆删除一个ARP表项。

    ◆增加一个ARP表项。

    例如,把主机duper从ARP表中删除:


    # arp -d duper




    假如要将一台名为bruegel的主机增加到ARP表中,其物理数据链路地址的格式为 x : x : x : x : x : x,其中每个x是一个介于0到FF之间的十六进制数,可以使用下面的命令:


    # arp -s bruegel 08:00:20:62:be:07




    2.arpwatch

    ARP由arpwatch-2.1a11-1.i386.rpm(最新的版本)提供,内含arpwatch和arpsnmp两个程序。此工具用于监控以太网络(Ethernet)和FDDI的IP及其对应的实体地址(即网络卡号),并维护IP/实体地址对应的数据库。

    arpwatch也会用Mail方式通知对应数据库的改变过程。因为arpwatch一定会用到libpcap,所以,若是另外安装arpwatch,请先确定已经安装了libpcap-0.4-20lp.i386.rpm这个套件。

    使用arpwatch很容易,系统管理者只需执行“# ntsysv”,并将arpwatch的执行功能打开。若要立即开始ARP监控,可以执行下面命令:


    # arpwatch

    arpsnmp的功能和arpwatch功能差不多,使用“# man arpwatch”和“# man arpsnmp”可以获得更详细的说明。

  11. linux_ 于 2005-09-28 11:22:04发表:

    进入vi之后,首先进入的就是命令模式,也就是等待命令输入,而不是文本输入,这时输入的字符都将作为命令来解释。光标停在屏幕第一行首位上(用反白光标表示),其余各行行首均有一个“~”符号,表示该行为空行。

    最后一行也称状态行,显示出当前正在编辑的文件名及其状态。如本例是[New File],表示example.c是一个新建的文件。如果example.c文件已经存在,那么输入上述命令后,则在屏幕上显示出该文件的内容,并且光标停在第一行的首位,在状态行显示出该文件的文件名、行数和字符数。

    当用vi建立一个新文件时,进入vi的命令中也可以不给出文件名;当编辑完文件需要保存数据时,再由用户指定文件名。

    进入vi时,用户不仅可以指定一个待编辑的文件名,而且还有许多附加操作。

    如果希望在进入vi之后,光标处于文件中特定的某行上,可在vi后加上任选项+n,其中n为指定的行数。如果希望在进入vi之后光标处于文件最末行,则只需把命令中附加项“+”后面的数字n省略掉。

    进入vi时,除了可以指定一个光标起始行号之外,还可以在命令中指定一个模式串,这样进入vi后光标就处于文件中第一个与指定模式串相匹配的那一行上。

    使用vi可以同时编辑多个文件,只要在进入vi的命令中写入所要操作的文件即可;还可以使用通配符。

    3.退出vi

    当编辑完文件,准备退出vi返回到Shell时,可以使用以下几种方法之一。

    (1)在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则vi保存该文件后退出,返回到Shell;若当前编辑的文件没被修改过,则vi直接退出, 返回到Shell。

    (2)在末行模式下,输入命令“:q ”系统退出vi,返回到Shell。若在用此命令退出vi时,编辑文件没有被保存,则vi在显示窗口的最末行显示如下信息:“ No write since last change (use ! to override)”,提示用户该文件被修改后没有保存,vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件,而要强行退出vi时,可使用命令“ :q!”,则vi放弃所做修改直接退到Shell下。

    (3)在末行模式下,输入命令“ :wq”,vi将先保存文件,然后退出返回到Shell。

    (4)在末行模式下,输入命令“ :x”,该命令的功能同命令模式下的ZZ命令功能相同。

  12. linux_ 于 2005-09-28 11:21:44发表:

    文本编辑工具

    vi是常用的文本编辑工具,是Visual Interface的简称。vi在Linux上的地位就像DOS上的edit程序一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,并且用户可以根据自己的需要对其进行定制,这是其它很多编辑程序所不具备的。

    vi不是一个排版程序,它不像MS Word或WPS那样可以对字体、格式、段落等其它属性进行编排,它只是一个文本编辑程序。vi没有选单,只有命令,并且命令繁多。

    1.工作模式

    vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。

    (1)命令行模式

    任何时候,不管用户处于何种模式,只要按一下“Esc”键,即可使vi进入命令行模式。在Shell环境(提示符为$)下输入启动vi命令,进入编辑器时,也是处于该模式下。

    在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符串都被当作编辑命令来解释。若输入的字符串是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符串不是合法的vi命令,vi会响铃报警。

    (2)文本输入模式

    在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当作文件内容放入缓冲区,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按“Esc”键即可。

    (3)末行模式

    末行模式也称ex转义模式。vi和ex编辑器的功能是相同的,二者主要区别是用户界面。在vi中,命令通常是单个键,例如i、a、o等;而在ex中,命令是以按回车键结束的正文行。vi有一个专门的“转义”命令,可访问很多面向行的ex命令。

    在命令模式下,用户按“:”键即可进入末行模式,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。

    2.进入vi

    用户登录到系统中之后,在系统提示符后键入vi和想要编辑(或建立)的文件名,便可进入vi。


    $ vi example.c

  13. linux_ 于 2005-09-28 11:21:22发表:

    4.代码优化

    代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合。其目的是改善程序的执行性能。GCC提供的代码优化功能非常强大,它通过编译选项-On来控制优化代码的生成,其中,n是一个代表优化级别的整数。对于不同版本的GCC来说,n的取值范围及其对应的优化效果不完全相同,比较典型的范围是从0变化到2或3。

    编译时使用选项-O,可以告诉GCC同时减小代码的长度和执行时间,其效果等价于-O1。在这一级别上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。

    选项-O2告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。选项-O3表示除了完成所有-O2级别的优化之外,还包括循环展开及其它一些与处理器特性相关的优化工作。

    通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。许多Linux程序员都喜欢使用-O2选项,因为它在优化长度、编译时间和代码大小之间,取得了一个比较理想的平衡点。

    5.调试

    一个功能强大的调试器不仅为程序员提供了跟踪程序执行的手段,而且还可以帮助程序员找到解决问题的方法。对于Linux程序员来讲,GDB(GNU Debugger)通过与GCC的配合使用,为基于Linux的软件开发提供了一个完善的调试环境。

    默认情况下,GCC在编译时不会将调试符号插入到生成的二进制代码中,因为这样会增加可执行文件的大小。如果需要在编译时生成调试符号信息,可以使用GCC的-g或-ggdb选项。GCC在产生调试符号时,同样采用了分级的思路,开发人员可以通过在-g选项后附加数字1、2或3来指定在代码中加入多少调试信息。

    默认的级别是2(-g2),此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。级别3(-g3)包含级别2中的所有调试信息,以及源代码中定义的宏。级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储。

    回溯跟踪指的是监视程序在运行过程中的函数调用历史;堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法。这两种都是经常用到的调试手段。

    GCC产生的调试符号具有普遍的适应性,可以被许多调试器加以利用,但如果使用的是GDB,那么还可以通过-ggdb选项在生成的二进制代码中包含GDB专用的调试信息。这种做法的优点是可以方便GDB的调试工作,但缺点是可能导致其它调试器(如DBX)无法进行正常的调试。选项-ggdb能够接受的调试级别和-g是完全一样的,它们对输出的调试符号有着相同的影响。

    最后提醒一点,代码在经过优化之后,在源程序中声明和使用的变量很可能不再使用,控制流也可能会突然跳转到意外的地方,循环语句有可能因为循环展开而变得到处都有,所有这些对调试来讲都将是一场噩梦。建议在调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化。

  14. linux_ 于 2005-09-28 11:20:13发表:

    如果从程序员的角度看,只需要简单地执行一条GCC命令就可以了,但从编译器的角度来看,它需要完成一系列非常繁杂的工作。首先,GCC需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着,GCC会调用ccl和as,将处理后的源代码编译成目标代码;最后,GCC会调用链接程序ld,把生成的目标代码链接成一个可执行程序。

    GCC提供多种指定编译器处理方式的编译选项:

    -o 为将产生的可执行文件指定一个文件名来代替缺省的a.out。

    -c 选项告诉GCC仅把源代码编译为目标代码,跳过汇编和连接的步骤。

    -S 要求编译程序生成来自源代码的汇编程序输出。

    -E 不经过编译预处理程序的输出,输送至标准输出。当这个选项被使用时, 预处理器的输出被送到标准输出,而不是储存在文件里。

    2.警告提示功能

    GCC包含完整的出错检查和警告提示功能,可以帮助Linux程序员写出更加专业和优美的代码。出错检查和警告提示如下:

    -pedantic 能够帮助程序员发现一些不符合ANSI/ISO C标准的代码,但不是全部。只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现,并提出警告。 -Wall 使GCC产生尽可能多的警告信息。

    -w 禁止所有的报警。

    -Werror 要求GCC将所有的警告当成错误进行处理,这在使用自动编译工具(如Make等)时非常有用。如果编译时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改。只有当相应的警告信息消除时,才可能将编译过程继续朝前推进。

    3.库依赖

    在Linux下开发软件时,完全不使用第三方函数库的情况是比较少见的。从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(.so或.a)的集合。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,将库文件放到/usr/lib/目录下,但并不是所有的情况都如此。正因为这样,GCC在编译时必须有办法来查找所需要的头文件和库文件。

    GCC采用搜索目录的办法来查找所需要的文件,-I选项可以向GCC的头文件搜索路径中添加新的目录。例如,如果在/home/test/include/目录下有编译时所需要的头文件,为了让GCC能够顺利地找到它们,就可以使用-I选项:


    # gcc foo.c -I /home/test/include -o foo

    同样,如果使用了不在标准位置的库文件,那么可以通过-L选项向GCC的库文件搜索路径中添加新的目录。