红联Linux门户
Linux帮助

对于Linux新手,其他人可以跳过

发布时间:2007-09-06 15:21:13来源:红联作者:fortemedia
  (1)Linux从源代码安装软件的一般过程是Configure,make,make install;configure是一个shell脚本,负责根据机器或用户的的设置生成一个叫Makefile的文件。

  而make命令就是让编译器(gcc等)根据Makefile文件自动的编译和连接以生成目标代码(可执行文件,在windows下就是exe文件);make install就是根据Makefile的表述把目标代码以及相关的文件拷贝的设定的目录。简单说,make就是Unix,Linux平台下的工程管理器,它能自动编译和安装软件。对于某些软件的安装,也就是最后一步(这里假设你在自己的家目录中完成了前面两步)需要root用户权限,因为make install可能要把一些文件拷贝到之有root用户有权限写入的目录,对于本文中要安装的drcom-suite就是如此,它要将一些文件拷贝到/sbin ,/etc等目录中,另外,在本例中drcomsuite的安装不要用Configure,它也没有提供这个脚本,它已经提供了Makefile,直接运行make,make install就可以了。

  (2)软件是有相关性的,一些程序为另外的程序提供服务,所以软件的安装是有顺序的,并且有的时候不能颠倒(有新手要不耐烦了,发难了,windows下怎么没有那么麻烦阿?windows下有dll文件,叫做动态连结库,你双击安装的exe程序已经把它要用的那些库打包到exe文件里面,安装时就提取出来放到它的安装目录了,写过vb的知道,你写个程序但是不把一些dll文件打包安装,它在没有装VB的机器上就不能运行,基本道理一样。

  另外一般windows下的软件都是以二进制可执行文件的形式发布,而不是源代码,“Linux is not windows ”,所以请不要总是把时间花在它们的比较之上。我之前不用windows是我买不起正版windows,我对自己的要求是:如果我还写代码,那么我就尽可能不用盗版软件,我必须尊重其他的软件作者。当然,为什么尽可能呢,如果老师让我交AutoCAD的课程设计,那我该怎么办呢?但是,请你相信,当你开始了解了linux,并且尝试用它来解决你的学习工作的问题,而不是把它当玩物,那么你会象我一样对它如痴如醉的,这让我想起了一句名言:学一点点知识是一件可怕的事情。当然,整天打游戏的人除外,呵呵,整天打游戏的人也不会看这篇文章了)。

  具体来说,在本例中一定要先安装libdrcom,只有先安装了libdrcom,drcomsuite才可能编译成功,因为drcomsuite的编译需要libdrcom,不完善的说法是编译drcomsuite时需要libdrcom的一个drcom.h的头文件,安装了libdrcom之后,drcom.h文件会被拷贝到/usr/include文件夹中,这样编译drcomsuite时编译器才能找到drcom.h;这是drcomsuite在一般发行版本上的需要注意的地方,另外对于特定的发行版本还有其他的东西,比如在ubuntu的安装,还要依赖其他的东西,这个在后面特定的发行版的说明中具体讨论。

  (3)gcc的版本问题。开源软件之所以这么有活力的一个原因就是来自全世界的黑客们都在持续的改进它们的程序,版本会不断的升级,会越来越趋向于完美。版本的更新换代太快,但是这也是被某些商业软件的支持者指责的地方,版本的更新太快造成维护上的成本增加。这简直是跟强奸了某女然后把责任推托说是“怪你过分美丽”上一样没有道理!(不好意思,偏激了,我不恨微软,甚至有些同意某些人说的,不知道对不对,我只是引用不加评论,“如果没有微软,计算机就不会如此老少皆宜”,微软提供了漂亮的界面,易用的操作方式,在中国更是如此,拿三块钱买一张盗版光盘,马上就有一个可用的系统了。

  但我转向linux之后,我惊喜的发现linux可以跟window xp一样漂亮,甚至更漂亮,而我居然开始喜欢了命令行的操作方式,这个可以更高效!唉,废话有点多,见谅)不同的gcc版本用于编译的参数可能不一样,它可能不支持某个Makefile中给的gcc编译参数,在本例中就是如此,造成了在某些发行版本上不做某些改动就不能编译成功。还有,如果你要编译内核的模块,那么一定要用和当前内核相同的gcc的版本,系统上缺乏编译内核所用的gcc版本,就可能造成编译drcomsuite中就可能不成功,这个问题在ubuntu上体现了。

  (4)内核头文件与内核模块。有了内核头文件,你才可能编译内核的模块,一个简单的例子就是需要编译一个设备的驱动程序。内核模块是可以动态载入内存的,比如你通常的网卡,声卡驱动都是编译成模块的 ( 也可以编译进内核,根据内核配置文件)。运行/sbin/lsmod可以查看现在在内存中的模块。
文章评论

共有 3 条评论

  1. xdgoal 于 2007-09-11 19:59:14发表:

    牛人, 领教了,谢谢!!!!!!!!!

  2. 高高新新 于 2007-09-06 17:49:28发表:

    :ha3nd :ha3nd :ha3nd

  3. derVdsaea 于 2007-09-06 17:04:44发表:

    受教了