⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 208.html

📁 本文详细介绍了学习FREEBSD的一些命令
💻 HTML
字号:
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>www.newok.com::FreeBSD使用大全</title>
<link rel=stylesheet href="newok.css" tppabs="http://www.newok.com/include/newok.css">
</head>

<body>

<div align=center>
<p>&nbsp;</p>
<table width=720>
<tr><td>
<strong>当前所在位置:</strong><a href="javascript:if(confirm('http://www.at.china.com/bsd/index.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.at.china.com/bsd/index.html'" tppabs="http://www.at.china.com/bsd/index.html" class=t1>FreeBSD使用大全>></a>
</td></tr>
</table>
<table width=700>
<tr><th><font color=white>FreeBSD连载(56):手工编译安装程序</font></th></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align=left><i>作者:</i>王波</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><font color=white>虽然使用Ports&nbsp;Collection编译和安装软件非常简便,然而仍有两个理由来使用手工编译安装方式。一方面是Ports&nbsp;Collection中并不能涵盖所有的软件,有很多软件没有收入Ports&nbsp;Collection中。有很多原因使得一些很优秀的软件没有被收集入Ports&nbsp;Collection,例如,版权因素,或者没有志愿者对它移植到FreeBSD进行维护。另一方面,即使是通过Port来定制软件,仍需要了解了手工编译安装的过程和各种编译工具的使用,才能正常进行定制工作。<br><br>  通常在FreeBSD下编译并安装应用程序并不困难,因为FreeBSD是一种非常标准的Unix,为Unix开发的标准C程序很容易就能在它上面编译运行。<br><br><br>编译和软件工具<br><br>  为了编译和安装一个应用程序,必须要了解编译和运行软件的一般方法。对于大型程序和要求高效率的软件,通常用高级语言C来开发,使用C语言编译器将C源程序编译成执行程序。由于使用高级语言不依赖于硬件结构,这使得软件非常容易移植。Unix不仅提供了编译器,而且还提供了众多的工具来帮助进行编译和维护,最有用的工具为make。<br><br><br>GNU&nbsp;C与编译连接过程<br><br>  C作为一种编译型的高级语言,这就是说运行C程序之前要将其先编译成可执行的由机器指令构成的执行程序,因此就需要使用一个编译器来对C源代码进行处理,FreeBSD使用的是GNU的C编译器。<br><br>$&nbsp;cc&nbsp;hello.c<br>$&nbsp;./a.out<br>Hello,&nbsp;world!<br>&nbsp;<br>&nbsp;<br><br>  UNIX下缺省使用a.out作为生成的文件名,可以使用-o参数指出生成的执行文件名。<br><br>  事实上前面的编译生成执行文件的过程由两步组成,一是生成目标文件,通常使用.o为后缀,然后进行连接生成执行文件。因此,可以使用ar将多个目标文件组合成一个函数库文件,而可以使用nm来查看库文件的内容。<br><br>$&nbsp;cc&nbsp;-c&nbsp;f1.c<br>$&nbsp;cc&nbsp;-c&nbsp;f2.c<br>$&nbsp;ar&nbsp;c&nbsp;mlib.a&nbsp;f1.o&nbsp;f2.o<br>$&nbsp;nm&nbsp;mlib.a<br>&nbsp;<br>&nbsp;<br><br>  FreeBSD使用的C语言编译器gcc是一种非常流行的,多平台、高效率的C语言编译器,它提供了多种选项用于生成应用软件。以下为常用的一些选项:<br><br>-L<br>&nbsp;定义连接库文件的目录<br>&nbsp;<br>-I&nbsp;<br>&nbsp;定义C源码的头文件的目录<br>&nbsp;<br>-o<br>&nbsp;后面跟的参数为要生成的执行文件的名<br>&nbsp;<br>-O<br>&nbsp;进行编译优化,可以指定使用不同的优化级别,从O2到O6,每个不同的级别使用的优化设置不同。<br><br>相关的选项还有定义生成的指令码类型的参数,如-m486生成486指令,缺省的gcc版本(2.7.2)不支持Pentium代码。<br>&nbsp;<br>-g&nbsp;<br>&nbsp;加入调试代码,可以在完成后使用strip命令删除用于调试的信息<br>&nbsp;<br>-c<br>&nbsp;仅仅进行编译而不进行连接,生成目标文件<br>&nbsp;<br>-fPic<br>&nbsp;生成相对地址的代码,用于最后生成动态连接库<br>&nbsp;<br>-static<br>&nbsp;强制生成静态连接的程序<br>&nbsp;<br>-aout<br>&nbsp;生成a.out格式的执行文件、目标代码等,缺省使用ELF格式<br>&nbsp;<br>-elf<br>&nbsp;3.0之后为缺省设置,生成ELF格式的目标和执行代码<br>&nbsp;<br><br><br>  可以通过命令行参数查看当前使用的GNU&nbsp;C编译器的版本:<br><br>$&nbsp;cc&nbsp;–version<br>Gcc&nbsp;version&nbsp;2.7.2.1<br>&nbsp;<br>&nbsp;<br><br>  FreeBSD当前使用GNU的C编译器gcc的版本为gcc&nbsp;2.7.2.1,这不是&nbsp;gcc编译器的最新版本,但稳定性非常好。虽然当前新版本的gcc&nbsp;2.8已经很稳定了,但是由于编译器在系统中的重要性,编译器出现问题会造成系统的稳定问题,因此FreeBSD还没有转向gcc&nbsp;2.8。另一个没有完全使用&nbsp;gcc&nbsp;2.8的重要原因是生成的执行文件格式问题,gcc&nbsp;2.8不再支持生成a.out&nbsp;执行格式的二进制程序。但完全转向gcc&nbsp;2.8版本是必然趋势,在当前正在开发的FreeBSD&nbsp;4.0-current中,已经使用了gcc&nbsp;2.8作为标准配置。<br><br>  在3.1系统中,如果想使用gcc&nbsp;2.8,就需要安装Packages&nbsp;Collection&nbsp;中提供的gcc-2.8软件包(或者使用Ports&nbsp;Collection对源代码进行编译)。事实上还有另外两个更强大的根据gcc进一步开发的编译器,pgcc支持Pentium&nbsp;代码(标准的gcc只支持生成486代码),egcc除了支持Pentium代码之外,还提供了更大的优化能力。这些版本是商业公司依据gcc进行的开发,但根据GPL&nbsp;许可,任意使用者都可以根据需要选择使用,使用这些编译器版本能进一步发挥系统的能力。<br><br><br>make<br><br>  通常应用程序都比较复杂,那么其源程序就不仅包括一个文件,而是由多个文件构成,这样应用程序的编译和连接过程就相对复杂得多。最简单的情况下可以使用shell程序来自动完成这个任务,然而由于并不是每次都更改了所有的文件,每次都完全重新编译所有的代码,不但浪费了处理器资源,也使得每次作一次小改变就得编译所有得文件,效率低下。最好是能够按照需要,编译改动过的代码文件,而对没有更新过的文件就不必重新编译,这样就节约了系统的处理能力。<br><br>  如果要使用shell脚本来处理这些依赖关系来,则要求根据文件的更新时间进行维护,需要的shell脚本就比较复杂。Unix提供了一个程序──make,来帮助按照代码之间的时间依赖关系来进行维护工作。<br><br>  make与其他解释语言不同,不是直接告诉make需要执行的命令,而是给定一些依赖规则,即在什么条件下应该执行什么处理,那么make就自动分析文件的更新时间,完成剩下的工作。规定make规则的文件一般命名为Makefile,这是一个make指令的集合,这个文件中包括目标定义、执行命令、宏定义和make&nbsp;伪指令。下面为一个简单的Makefile:<br><br>CC&nbsp;=&nbsp;/usr/local/bin/egcc<br>hello:	hello.c<br>		$(CC)&nbsp;-o&nbsp;hello&nbsp;hello.c<br>clean:&nbsp;<br>		echo&nbsp;delete&nbsp;files!<br>		rm&nbsp;hello<br>&nbsp;<br>&nbsp;<br><br>  这个例子中首先定义了一个宏CC,然后定义一个执行目标hello,这个目标依赖于hello.c文件,一旦hello.c更新,就需要执行下面的编译指令。注意,位于定义目标之后的执行命令应该使用一个&nbsp;“Tab”&nbsp;制表符引导,而不是其他空白字符。执行命令中首先将宏替换为它的值,再执行egcc命令编译程序。<br><br>  一个Makefile文件中可以定义多个目标,如上面例子中的hello和clean,如果不使用任何命令行参数来启动make,那么缺省使用第一个目标。为了应用其他的make目标,则必须使用make的命令行参数。<br><br>$&nbsp;make&nbsp;clean<br>delete&nbsp;files!<br>&nbsp;<br>&nbsp;<br><br>  make使用的缺省文件名为当前目录下的makefile或Makefile,如果使用其他文件,必须使用命令行参数-f指定文件名。<br><br>$&nbsp;make&nbsp;-f&nbsp;newmakefile<br>&nbsp;<br>&nbsp;<br><br>  GNU的make命令首先查看的文件名为GNUmakefile。<br><br>  使用了make,对大型的应用软件进行维护就会容易一些。然而不同的系统有一些与系统相关的定义,这些定义需要在Makefile中依据不同的系统重新设置,例如X&nbsp;Window的目录等,这样要完成可以适合多个不同系统的Makefile文件,仍然具有困难。有一些工具能帮助进行这些系统相关的设置,并生成Makefile&nbsp;文件,例如X&nbsp;Window系统使用xmkmf命令和imake模板文件来产生本地的Makefile&nbsp;文件,这样就能正确侦知本地系统中有关X&nbsp;Window的正确设置,但软件开发者首先要完成Imakefile文件,以使用xmkmf。而GNU的软件使用autoconf工具,它使用configure命令用来侦测很多系统相关的设置,如编译器、头文件、库函数等等,然后使用预设置的Makefile.in模板文件来产生相应的Makefile。有了这些工具,进行编译各种多平台的应用程序都不再是困难的了。<br><br>未完,待续。。。</font></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align=right><i>来源:</i><a href="javascript:if(confirm('http://freebsd.online.ha.cn/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://freebsd.online.ha.cn/'" tppabs="http://freebsd.online.ha.cn/">http://freebsd.online.ha.cn/</a></td></tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
声明:本站的文章和软件是本人从网上收集整理的(除本人的作品之外),所有版权属于作者,<br>
如有侵犯您的权益,请指出,本站将立即改正,谢谢.
<hr  width=500>
<br>
<font color=#ffffff>Copyright 2000 <a href="javascript:if(confirm('http://www.newok.com/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.newok.com/'" tppabs="http://www.newok.com/" class=t1>www.newok.com</a></font>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -