Linux下的软件源代码安装


  • 开源软件安装简介

1.可执行文件:Linux系统上真正识别的可执行文件其实是二进制文件,例如:/usr/bin/passwd,/bin/touch这些文件都是二进制文件。
2.可以通过file filename命令来查看某一个文件是否是可执行文件,如:
file 命令
其中ELF 64-bit LSB executable显示这是一个可执行文件,uses shared libs显示是否使用共享库

  • 开放源码,编译程序与可执行文件

    一般使用文本编辑器写出程序文件,这个程序文件其实就是一般的纯文本文件,是人可以看懂的,但是机器是看不懂的,所以我们需要通过编译程序将这个文本文件编译成机器能看懂的二进制文件。在编译过程中,一般会生成目标文件(就是.o这样的文件,顺带提一下,Linux上最标准的程序语言是C,就是.c这样的文件)。而有时候我们在程序中要引用/调用其他的外部子程序,或者利用其他软件提供的“函数功能”,所以我们在编译程序的时候,需要将引用/调用的函数库也加进去。这样,编译程序就可以将所有的程序代码和函数库做一个连接(Link)以生成正确的执行文件。

  • 函数库

    如图:
    函数库

  • make与configure

    1.因为一个程序肯定不止一个文件,每个文件可能都需要一条编译指令,再加上可能有的文件需要连接不同的函数库中的不同函数,那么在编译的时候,不可能让人去记录每条编译需要的连接的东西等等。
    2.所以通常软件开发商都会写一个检测程序来检测用户的操作环境,以及该操作环境时候有软件开发商所需要的其他功能,该检测程序检测完毕后,就会生成一个Makefile或者makefile的规则文件。
    3.而通常这个检测程序的文件名为configure或者config。
    4.当执行make或者make install的时候,make会在当前的目录下搜索Makefile或者makefile这个文本文件,而这个makefile文件就记录了源码如何编译的详细信息。
    5.检测程序一般会检查的数据有:
    是否有适合的编译程序可以编译本软件的程序代码
    是否已经存在本软件所需要的函数库或者需要的相关软件
    操作系统平台是否适合本软件,包括Linux的内核版本
    内核的头定义文件(header include)是否存在(启动程序必须要检测的)
    6.所以,在编译程序的过程中需要注意两件事情:一是执行configure来新建makefile文件,这个一定要成功,如果不成功,要仔细看报错的内容,看看是不是少了什么函数库等等,然后对应找解决办法。其次是使用make来调用所需要的数据来编译即可。
    7.如图:
    通过configure和make进行编译的示意图

  • Tarball软件

    1.所谓的Tarballe文件,就是将软件的所有源码文件先以tar打包,然后再采用压缩技术来压缩,最常用的是gzip压缩,所以Tarball文件的一般扩展名是.tar.gz或者.tgz。
    不过近来bzip2的压缩率较佳,所以Tarball渐渐以bzip2取代gzip,文件名也会变成*.tar.bz2之类的。
    3.Tarball是一个软件包,解压缩之后可以看到里面的文件通常有:源代码文件、检测程序文件(可能是configure或者config等文件名)、本软件的简易说明与安装说明(INSTALL或者README)。
    最重要的是最后两个文件,在安装软件的时候可以参考。

  • 以在Linux下安装memcached为例的一个小实战

    1.上传memcached。将memcached解压到指定目录,我这里放在/root/development/memcached-1.4.29下面,然后在该目录中执行./configure –prefix=/root/development/memcached-1.4.29
    2.在生成makefile文件的过程中失败了,提示了memcached依赖libevent库,如果你没有注意到出错了,那么你继续执行下面的make命令的时候,就会报这样的错:make: * No targets specified and no makefile found。以后见到这样的错误,就可以考虑回来看看你的configure命令是否正确执行完成。如果没有,就找找错在什么地方。
    3.去http://libevent.org/找最新的libevent库,然后传到Linux上去(因为我在Linux上直接下载的时候下载失败,所以采用了这种比较土鳖的方法),这里我把libevent解压在了/root/development/libevent-2.0.22-stable,然后执行./configure –prefix==/usr/local/libevent,其中/usr/local/libevent是我安装的地方,这个要记住下,也许后面会有用。
    4.然后就是在/root/development/libevent-2.0.22-stable目录下执行make && make install命令执行编译,安装完成之后,切回到原来memcached的解压缩目录/root/development/memcached-1.4.29下,重新执行./configure –prefix=/root/development/memcached-1.4.29命令,继续安装memcached。
    5.但是继续安装可能还是会出错,会提示找不到libevent,这个就需要在./configure –prefix=/root/development/memcached-1.4.29命令后面自己手动指定一下libevent的位置就行了。具体命令我忘了,在出错后面有提示,找找就可以了。
    6.最后执行 memcached -m 512 -vv命令启动memcached,其中-vv命令是可以查看你的memcached的状态。

  • 最后追加一个问题:有人在虚拟机下练习编译,会碰到一直处于编译过程,老是不结束的情况,这个情况可能是因为你的虚拟机的时间不对,导致gcc编译过程中检测时间通不过,所以一直处于编译状态,虽然这种情况碰到的概率很小,但是我还是提供一下解决方案(ps:仅仅针对时间这个问题):
    Linux命令行敲下如下命令:
  • #date -s "yyyy-mm-dd hh:mm:ss"
    #clock -w //把时间写入到cmos中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值