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

📄 0520source_code_and_tarball.htm

📁 鸟哥LINUX 学习课本
💻 HTM
📖 第 1 页 / 共 5 页
字号:
PAM 的函式功能,呵呵!我的程序就可以利用 Linux 原本就有的身份认证的程序咯!除此之外,其实我们的Linux 核心( kernel )也提供了相当多的函式库来给硬件开发者利用喔。<br> <br>函式库又分为动态与静态函式库,这两个咚咚的分别我们在后面的章节再加以说明。这里我们以一个简单的流程图,来示意一支有呼叫外部函式库的程序的执行情况。<br> <center><a name="fig_2"></a><img src="0520source_code_and_tarball_files/library.gif" nosave="" height="247" width="323"><br><font color="#000066">图二、程序引用函式库的示意图</font></center> <br>很简单的示意图啊!^_^!而如果要在程序里面加入引用的函式库,就需要如<a href="#fig_1">图一</a>所示,亦即在编译的过程当中,就需要加入函式库的相关设定啰。<br> <br>事实上, Linux 的核心提供很多的核心相关函式库与外部参数,这些核心功能在设计硬件的驱动程序的时候是相当有用的信息,这些核心相关信息大多放置在<b><font color="#000066">/usr/include</font></b>,<b><font color="#000066">/lib</font></b>,<b><font color="#000066">/usr/lib</font></b>里面哩!我们在本章的后续小节再来探讨。</blockquote><hr width="100%"><a name="intro_make"></a><img src="0520source_code_and_tarball_files/penguin-s.gif" nosave="" align="middle" height="23" width="17"><font color="#000099">什么是&#160;make 与 configure ?</font><blockquote>事实上,使用类似 gcc 的编译器来进行编译的过程并不简单,因为除了每个主程序与子程序均需要写上一笔编译过程的指令外,还需要写上最终的连结程序。程序代码小的时候还好,如果是类似WWW 服务器软件( 例如 <a href="http://linux.vbird.org//linux_server/0360apache.php">Apache</a>),或者是类似核心的原始码,动则数百 MBytes 的资料量,呵呵!指令会写到疯掉~这个时候,我们就可以使用make 这个指令的相关功能来进行编译过程的指令简化了!<br> <br>当执行 make 时,make 会在当时的目录下搜寻 <b><font color="#000066">Makefile( or makefile )</font></b> 这个文字文件,而 Makefile 里面则记录了原始码如何编译的详细信息!&#160;make 会自动的判别原始码是否经过变动了,而自动更新执行档,是软件工程师相当好用的一个辅助工具呢!<br> <br>咦!make 是一支程序,会去找 Makefile ,那 Makefile 怎么写?呵呵!通常软件开发商都会写一支侦测程序来侦测使用者的作业环境,以及该作业环境是否有软件开发商所需要的其它功能,该侦测程序侦测完毕后,就会主动的建立这个Makefile 的规则档案啦!通常这支侦测程序的文件名为 configure 或者是 config<br> <br>咦!?那为什么要侦测作业环境呢?!在 <a href="http://linux.vbird.org//linux_basic/0110whatislinux.php">什么是Linux </a>那个章节当中,不是有提到 Linux 不过就是一个核心吗?!是这样没错啦!但是您必须要了解的是,某些软件套件需要一些相关的套件辅助,并且,某些驱动程序则是适用在不同的核心系统(<i><font color="#000066">因为核心提供的函式库可能并不相同,例如kernel 2.2.xx 与 kernel 2.4.xx 就不太一样!</font></i> ),并且每个 Linuxdistribution 所提供的函式库名称与路径可能也不太一样,所以说,在 Mandrake上面可以执行的一个 binary file ,直接复制到 Red Hat 平台上,可不见得可以顺利执行(<i><font color="#000066">事实上,是不太可能可以执行啦!^_^</font></i> )。所以啦,原始码写出来之后,需要针对不同的作业环境来进行编译的行为吶!这个时候就很需要configure 以及 make 的功能啊!<br> <br>详细的 make 用法与 Makefile 规则,在后续的小节里面再探讨啰!</blockquote><hr width="100%"><a name="intro_tarball"></a><img src="0520source_code_and_tarball_files/penguin-s.gif" nosave="" align="middle" height="23" width="17"><font color="#000099">什么是Tarball 的套件 ?</font><blockquote>从前面几个小节的说明来看,我们知道所谓的原始程序代码,其实就是一些写满了程序代码的纯文本文件。那我们从前面的<a href="http://linux.vbird.org//linux_basic/0240tarcompress.php">档案的压缩与打包</a>章节当中,也了解了纯文字文件其实是很浪费硬盘空间的一种档案格式!<i><font color="#000066">(想一想,一个核心的原始码档案大约要 200~300 MB 以上,如果每个人都去下载这样的一个核心档案,呵呵!那么网络频宽不被吃的死翘翘才怪呢!)</font></i>所以啦,如果能够将这些原始码透过档案的打包与压缩技术来将档案的数量与容量减小,不但让使用者容易下载,套件开发商的网站频宽也能够节省很多很多啊!这就是Tarball 档案的由来啰!<br> <br>所谓的 Tarball 档案,其实就是将套件的所有原始码档案先以 <a href="http://linux.vbird.org//linux_basic/0240tarcompress.php#tar">tar</a>打包,然后再以压缩技术来压缩,通常最常见的就是以 <a href="http://linux.vbird.org//linux_basic/0240tarcompress.php#gzip">gzip</a>来压缩了。因为利用了 tar 与 gzip 的功能,所以 <font color="#000066">tarball档案一般的附档名就会写成 *.tar.gz 或者是简写为&#160; *.tgz 啰</font>!也就是说,Tarball 套件解压缩之后,里面的档案通常就会有:<ul><li><font color="#000066">原始程序代码档案;</font></li><li><font color="#000066">侦测程序档案( 可能是 configure 或 config 等档名 );</font></li><li><font color="#000066">本套件的简易说明与安装说明( INSTALL 或 README )。</font></li></ul>其中最重要的是那个 INSTALL 或者是 README 这两个档案,通常您只要能够参考这两个档案,呵呵!Tarball 套件的安装是很简单的啦!我们在后面的章节会再继续介绍 Tarball 这个玩意儿。</blockquote><hr width="100%"><a name="intro_howto"></a><img src="0520source_code_and_tarball_files/penguin-s.gif" nosave="" align="middle" height="23" width="17"><font color="#000099">如何安装与升级套件</font><blockquote>将原始码作了一个简单的介绍,也知道了系统其实认识的可执行档是binary file 之后,好了,得要聊一聊,那么怎么安装与升级一个 Tarball 的套件?为什么要安装一个新的套件呢?当然是因为我们的主机上面没有该套件啰!那么,为何要升级呢?!原因可能有底下这些:<ul><li><font color="#000066">需要新的功能,但旧有主机的旧版套件并没有,所以需要升级到新版的套件;</font></li><li><font color="#000066">旧版本的套件上面可能有安全上的顾虑,所以需要更新到新版的套件;</font></li><li><font color="#000066">旧版的套件执行效能不彰,或者执行的能力不能让管理者满足。</font></li></ul>在上面的需求当中,尤其需要注意的是第二点,当一个套件有安全上的顾虑时,千万不要怀疑,赶紧更新套件吧!否则造成网络危机,那可不是闹着玩的!那么更新的方法有哪些呢?基本上更新的方法可以分为两大类,分别是:<ul><li><font color="#000066">直接以原始码透过编译来安装与升级;</font></li><li><font color="#000066">直接以编译好的 binary file 来安装与升级。</font></li></ul>上面第一点很简单,就是直接以 Tarball 在自己的机器上面进行侦测、编译、安装与设定等等动作来升级就是了。不过,这样的动作虽然让使用者在安装过程当中具有很高的弹性,但毕竟是比较麻烦一点,如果Linux distribution 厂商能够针对自己的作业平台先进行编译等过程,再将编译好的binary file 释出的话,那由于我的系统与该 Linux distribution 的环境是相同的,所以他所释出的binary file 就可以在我的机器上面直接安装啦!省略了侦测与编译等等繁杂的过程呢!目前很多binary file 升级的机制呢,包括有 <font color="#000066">Red Hat 发展的 RPM与 up2date, yum 等在线更新模式;Mandrake 的 urpmi 套件更新方式; Debian使用的 dpkg ; Sun Unix 使用的 pkg ,以及目前很流行的 apt 在线更新模式等等</font>,以使用率来说,目前最传统的是以Tarball 直接进行编译的安装与升级,而另一个则是以 RPM 相关的机制来进行安装与升级啰!本章节主要针对Tarball ,至于 RPM 则留待下个章节再来介绍呢!<br> <br>好了,那么一个套件的 Tarball 是如何安装的呢?基本流程是这样的啦:<ol><li><font color="#000066">将 Tarball 由厂商的网页下载下来;</font></li><li><font color="#000066">将 Tarball 解开,产生很多的原始码档案;</font></li><li><font color="#000066">开始以 gcc 进行原始码的编译( 会产生目标文件 objectfiles );</font></li><li><font color="#000066">然后以 gcc 进行函式库、主、子程序的连结,以形成主要的binary file;</font></li><li><font color="#000066">将上述的 binary file 以及相关的设定文件安装至自己的主机上面。</font></li></ol>上面第 3, 4 步骤当中,我们可以透过 make 这个指令的功能来简化他,所以整个步骤其实是很简单的啦!只不过您就得需要至少有gcc 以及 make 这两个套件在您的 Linux 系统里面才行喔!详细的过程以及需要的套件我们在后面的章节继续来介绍的啦!</blockquote></blockquote><hr width="100%"><a name="simple_ex"></a><img src="0520source_code_and_tarball_files/penguin-m.gif" alt="" nosave="" align="middle" height="34" width="25"><font size="+1" color="#000099">一个简单的范例:</font><ul>经过上面的介绍之后,您应该比较清楚的知道原始码、编译器、函式库与执行档之间的相关性了。不过,详细的流程可能还是不很清楚,所以,在这里我们以一个简单的程序范例来说明整个编译的过程喔!赶紧进入Linux 系统,实地的操作一下底下的范例呢!<br> <br><hr width="100%"><a name="simple_ex_hello"></a><img src="0520source_code_and_tarball_files/penguin-s.gif" nosave="" align="middle" height="23" width="17"><font color="#000099">印出Hello World</font><blockquote>我们以 Linux 上面最常见的 C 语言来撰写第一支程序!第一支程序最常作的就是.....在屏幕上面印出『<font color="#000066">HelloWorld!</font>』的字样~当然,这里我们是以简单的 C 语言来撰写,如果您对于C 有兴趣的话,那么请自行购买相关的书籍喔! ^_^好了,不啰唆,立刻编辑第一支程序吧!<i><font color="#000066">(注:请先确认您的 Linux 系统里面已经安装了 gcc 了喔!如果尚未安装 gcc 的话,请先参考下一节的RPM 安装法,先安装好 gcc 之后,再回来阅读本章 )</font></i><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" color="#cccccc" face="SimSun"># 1. 先编辑原始码:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">vi hello.c</font></b><font color="#ffccff">&lt;==注意一下,C 语言用 .c 的附檔名</font></font><br><font size="-1" color="#ffff00" face="SimSun">#include &lt;stdio.h&gt;</font><br><font size="-1" color="#ffff00" face="SimSun">int main(void)</font><br><font size="-1" color="#ffff00" face="SimSun">{</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf("Hello World\n");</font><br><font size="-1" color="#ffff00" face="SimSun">}</font><br><font size="-1" color="#ffffff" face="SimSun"> </font><br><font size="-1" color="#ff6666" face="SimSun"># 上面是 C语言的语法,那个第一行的 # 并不是批注喔!如果您担心</font><br><font size="-1" color="#ff6666" face="SimSun"># 输入错误,请到底下的连结下载这个档案:</font><br><font size="-1" color="#ff6666" face="SimSun"># <a href="http://linux.vbird.org/download/books/basic/source_code/hello.c">http://linux.vbird.org/download/books/basic/source_code/hello.c</a></font><br><font size="-1" color="#ffffff" face="SimSun"> </font><br><font size="-1" color="#cccccc" face="SimSun"># 2. 开始将原始码编译成为可执行的binary file :</font><br><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">gcc hello.c</font></b></font><br><font size="-1" face="SimSun"><font color="#ff6666"># 这个时候,在本目录下会产生一个名为</font><font color="#ffccff">a.out</font><font color="#ff6666">的执行档!</font></font><br><font size="-1" color="#ff6666" face="SimSun"># 在预设的状态下,如果我们直接以gcc 编译原始码,并且没有加上</font><br><font size="-1" face="SimSun"><font color="#ff6666"># 任何参数,则</font><font color="#ffccff">执行档的档名会被自动设定为a.out 这个文件名称</font><font color="#ff6666">!</font></font><br><font size="-1" color="#ffffff" face="SimSun"> </font><br><font size="-1" color="#cccccc" face="SimSun"># 3. 执行一下这个档案:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">./a.out</font></b></font><br><font size="-1" face="SimSun"><font color="#ffffff">Hello World&#160;</font><font color="#ffccff">&lt;==呵呵!成果出现了!</font></font></td></tr></tbody></table><font color="#000000">&#160; </font><br><font color="#000000">好了,上面的例子很简单吧!那个 hello.c 就是原始码,而gcc 就是编译器,至于 a.out 就是编译成功的可执行 binary file 啰!咦!如果我想要产生目标文件(object file )来进行其它的动作( </font><i><font color="#000066">在较大的套件当中,就需要使用多个目标文件来进行相关的连结</font></i><font color="#000000">),而且执行档的档名也不要用预设的a.out ,那该如何是好?可以将上面的第 2 个步骤改成这样:</font>

⌨️ 快捷键说明

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