在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包,不同的最终用户经过编译就可以正确运行,这也是非常符合c语言的设计哲学的,一次编写,到处编译么,而常见的二进制包,比如rpm和deb,软件开发者必须为每种特定的平台定制好专门的软件包,这个通过rpm文件的后缀名就可以初见端倪,比如ppc,sparc,i386之类,在这里不做过多的陈述,其实源码安装软件远没有很多朋友想象的那么复杂,下面我在这里尽可能详细的做一些陈述,如有谬误,欢迎朋友们拍砖!

安装的具体步骤:

  1. $ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
  2. $ cd XXXX
  3. $ ./configure
  4. $ make
  5. # make install

复制代码

  1. $ make clean

复制代码

安装完成后用来清理临时文件

  1. # make uninstall

复制代码

用来卸载软件

解压:

        最常见源码包的就两种(XXXX.tar.gz or XXXX.tar.bz2),其实这些源码包都是由2个工具压缩而成的,tar.gz结尾的文件用到的工具是tar和gunzip,而tar.bz2结尾的文件所使用的工具是tar和bzip2,之所以这样做是因为,tar仅仅能够打包多个文件但是没有压缩的功能,而gz和bz2却刚好相反,仅能够压缩单个文件,这样我们常见的源码包实际上是通过tar先将不同的源文件打包,然后再通过gunzip或者bzip2压缩后发布的,当然这两个步骤可以通过一条命令实现:

  1. $ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)

复制代码

解压的相关命令如下:

  1. $ tar zxvf XXXX.tar.gz
  2. $ tar jxvf XXXX.tar.bz2

复制代码


./configure:

        解压完成就正式开始安装了(补充一点,开始configure之前,如有必要,请使用patch工具为源码打上相应的补丁),首先跳转到源码的解压目录,众所周知,开始configure前还是应该仔细阅读源码目录下的README或者INSTALL文件,好多安装中的注意事项在这里都有所罗列,configure实际上是一个脚本文件,在当前目录中键入"./configure",shell就会运行当前目录下的configure脚本,有一点必须说明,在整个configure过程,其实编译尚未进行,configure仅仅是做编译相关的准备工作,它主要对您当前的工作平台做一些依赖性检查,比如编译器是否安装,连接器是否存在,如果在检测的过程没有任何错误,你很幸运,configure脚本会在当前目录下生成下一步编译链接所要用到的另一个文件Makefile,当然configure支持及其丰富的命令行参数,可以键入"./configre --help"获取具体的信息,最常用的恐怕就是:

  1. $ ./configure --prefix=/opt/XXX

复制代码

它用来设置软件的安装目录. 

make:

        如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:

  1. $ make

复制代码


make install:

        当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,如果在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:

  1. #make install

复制代码


make clean:
make uninstall:

        这两个步骤只是安装的后续操作,有一点必须注意,"clean"和"uninstall"也是Makefile文件中相应的两个标号,执行这两个步骤的时候Makefile文件必要保留,"make clean"用来清除编译连接过程中的一些临时文件,"make uninstall"是卸载相关应用程序,与make install类似,make uninstall也需要切换到root执行,不过"uninstall"标号在好多Makefile中都被省略掉了,朋友们完全可以自己在相应的Makefile文件一探究竟.

Why?
        在这里我尝试着解释一下上面这些步骤存在的理由,从C语言的角度来说,一个程序从源码到正确生成相关的可执行文件,下面这些部分必不可少:源文件,编译器,汇编器,连接器,依赖库,通过上面几个步骤,朋友们应该已经知道,真正执行编译链接操作的步骤只有一个(make),那其他步骤存在的理由何在?
        有一点是肯定的,我在自己的电脑上使用C语言写一些自娱自乐的小程序,也没有用到"configure or make install"之类的命令,顶多自己写个Makefile管理源文件的依赖关系,可是软件开发者不同,他必须考虑到软件的可移植性,他开发的软件不能仅仅就在他自己的pc上跑吧?不同的平台可能连硬件体系结构都不同,这样就导致了Makefile的不可移植性,为了解决这个问题,开发者通常使用autoconf之类的工具生成相应的configure脚本,而configure脚本就是用来屏蔽相应的平台差异,从而正确生成Makefile文件,然后make再根据configure的劳动成果(Makefile)完成编译链接工作.        
        至于"install or clean or uninstall",也只是对应着Makefile文件中不同的规则,关于Makefile的详细信息,朋友们可以自行查阅相关的文档.

一个例子
        下面是我在自己的pc机上源码安装tar工具的过程,权当做是上面这些步骤的一个具体事例吧:

  1. [root@localhost ~]# head -n 1 /etc/issue
  2. CentOS release 5.4 (Final)
  3. [root@localhost ~]# uname -sr
  4. Linux 2.6.18-164.el5
  5. [root@localhost ~]# gcc --version
  6. gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
  7. Copyright (C) 2006 Free Software Foundation, Inc.

复制代码

这个是我的系统信息。

  1. [root@localhost tools]# pwd
  2. /root/tools
  3. [root@localhost tools]# ls
  4. tar-1.23.tar.bz2
  5. [root@localhost tools]# tar jxvf tar-1.23.tar.bz2
  6. ......
  7. [root@localhost tools]# ls
  8. tar-1.23  tar-1.23.tar.bz2
  9. [root@localhost tools]# cd tar-1.23
  10. [root@localhost tar-1.23]# ls
  11. ABOUT-NLS     build-aux   configure     gnu      Makefile.am  po       src
  12. acinclude.m4  ChangeLog    configure.ac  INSTALL  Makefile.in  README   tests
  13. aclocal.m4    ChangeLog.1  COPYING       lib      Make.rules   rmt      THANKS
  14. AUTHORS       config.h.in  doc           m4       NEWS         scripts  TODO

复制代码

解压原文件包,可以发现其中包括了configure脚本和README文件。

  1. [root@localhost tar-1.23]# mkdir -v ~/tar
  2. mkdir: 已创建目录 “/root/tar”
  3. [root@localhost tar-1.23]# ./configure --prefix=/root/tar
  4. ......
  5. [root@localhost tar-1.23]# echo $?
  6. 0

复制代码

建立软件安装目录,并configure,检查configure返回结果,为0代表运行成功.

  1. [root@localhost tar-1.23]# ls -F
  2. ABOUT-NLS     ChangeLog.1     configure.ac  m4/          po/       tests/
  3. acinclude.m4  config.h        COPYING       Makefile    README    THANKS
  4. aclocal.m4    config.h.in     doc/          Makefile.am  rmt/      TODO
  5. AUTHORS       config.log      gnu/          Makefile.in  scripts/
  6. build-aux/    config.status*  INSTALL       Make.rules   src/
  7. ChangeLog     configure*      lib/          NEWS         stamp-h1

复制代码

可以看到Makefile文件已经被成功建立.

  1. [root@localhost tar-1.23]# less Makefile | grep install:
  2. || { echo "ERROR: files left after uninstall:" ; \
  3. install: install-recursive
  4. uninstall: uninstall-recursive

复制代码

在建立的Makefile中存在install和uninstall标号

  1. [root@localhost tar-1.23]#make
  2. ......
  3. [root@localhost tar-1.23]#echo &?
  4. 0

复制代码

make成功

  1. [root@localhost tar-1.23]#make install
  2. ......
  3. [root@localhost tar-1.23]# ls /root/tar
  4. bin  libexec  sbin  share
  5. [root@localhost tar]# cd /root/tar/bin
  6. [root@localhost bin]# ls
  7. tar
  8. [root@localhost bin]# ./tar --help
  9. ......
  10. [root@localhost tar-1.23]#echo &?
  11. 0

复制代码

安装并简单测试成功

 

linux下源码安装软件的更多相关文章

  1. linux下源码安装netcat

    linux下源码安装netcat http://blog.chinaunix.net/uid-20783755-id-4211230.html 1,下载netcat源码,netcat-0.7.1-13 ...

  2. Linux下源码安装JDK7

    安装说明 安装环境:Red Hat Enterprise Linux7.1安装方式:源码安装 软件:jdk-7u80-linux-x64.gz 安装 #首先查看系统原有JDK信息 rpm -qa | ...

  3. Linux 下源码安装大杂烩

    本文仅以记录平常源码安装部分软件是需注意的关键点. 有时为了方便,如在 Ubuntu 系统中,采用 sudo apt-get install soft-version 来安装某一版本的软件显得更为便捷 ...

  4. Linux下源码安装方式安装MySQL

    1.下载安装包:https://downloads.mysql.com/archives/community/  2.安装开发工具和安装包 因为要把源码编译成二进制数据,所以必须要有编译器和解释器 g ...

  5. linux下源码安装apache服务

    1.搭建静态网站是,我们只需要搭建apache服务即可满足要求. 例如:如果我再客户端游览器输入地址,他会找到192.168.1.100这个服务器,然后根据端口会找到apache服务器.apache他 ...

  6. linux下源码安装rabbitMq

    一.安装erlang前期环境安装1.利用yum安装erlang编译所依赖的环境 yum -y install make gcc gcc-c++ kernel-devel m4ncurses-devel ...

  7. Linux下源码安装MySQL-5.6.25

    从mysql-5.5起,mysql源码安装开始使用cmake了,因此我们得先安装cmake,配置安装目录./configure --perfix=/.....的时候和以前的会有些区别. 一.安装cma ...

  8. linux下源码安装

    ●源码的安装(./configure –prefix 命令用法)一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一个可执行脚本 ...

  9. linux下源码安装jdk1.8和tomcat8.5

    Java是目前可移植性较高的语言,相当火热,tomcat运行就需要Java语言环境 0.java简介 1)tomcat运行需要对应的Java环境,Java环境通过安装jdk来获得2)为了防止兼容性问题 ...

随机推荐

  1. java.util.concurrent.Exchanger应用范例与原理浅析--转载

    一.简介   Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据.在本文中我将采取由浅入深的方式来介绍分析这个工具类.首先我们来看看官方的api文档中的叙述: A ...

  2. 杨氏矩阵 leecode 提

    提交网址https://oj.leetcode.com/problems/search-a-2d-matrix/ 有个矩阵中的数,从左向右递增,从上而下递增,快速查找是一个数是是否存在,剑指offer ...

  3. [九度OJ]1137.浮点数加法

    原题链接:http://ac.jobdu.com/problem.php?pid=1137 题目描述: 求2个浮点数相加的和题目中输入输出中出现浮点数都有如下的形式:P1P2...Pi.Q1Q2... ...

  4. iOS开发——View的透明属性hidden、alpha、opaque

    Hidden.Alpha.Opaque的区别 在iOS中,每个View都有Hidden.Alpha.Opaque三个关于透明的属性,官方文档介绍如下: 1. @property(nonatomic) ...

  5. Add And Reset a Federation Server to a Federation Server Farm adfs ad

    Applies To: Active Directory Federation Services (AD FS) 2.0 After you install the Active Directory ...

  6. 问题-RZ安装后报错“RzBorder.pas”

    错误象现:[Error] RzBorder.pas(1429): Number of elements differs from declaration [Fatal Error] RzEdit.pa ...

  7. A Tour of Go Numeric Constants

    Numeric constants are high-precision values. An untyped constant takes the type needed by its contex ...

  8. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

  9. Codeforces Round #382 (Div. 2)E. Ostap and Tree

    E. Ostap and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  10. uva 1422 - Processor(二分+优先队列)

    题目链接:uva 1422 - Processor 题目大意:有一个机器要处理一些问题,给出这些问题可以开始的时间和必须完成的时间,以及任务的工作量,问说机器必须以最少每秒多少得工作量才能完成这些任务 ...