`

linux下源码安装软件

 
阅读更多
http://www.cnblogs.com/huangfenghit/archive/2011/02/17/1957057.html

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

安装的具体步骤:
$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
$ cd XXXX
$ ./configure
$ make
# make install
复制代码
$ make clean
复制代码
安装完成后用来清理临时文件
# make uninstall
复制代码
用来卸载软件

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

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

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

make install:
        当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,如果在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:
#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工具的过程,权当做是上面这些步骤的一个具体事例吧:
[root@localhost ~]# head -n 1 /etc/issue
CentOS release 5.4 (Final)
[root@localhost ~]# uname -sr
Linux 2.6.18-164.el5
[root@localhost ~]# gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
Copyright (C) 2006 Free Software Foundation, Inc.
复制代码
这个是我的系统信息。
[root@localhost tools]# pwd
/root/tools
[root@localhost tools]# ls
tar-1.23.tar.bz2
[root@localhost tools]# tar jxvf tar-1.23.tar.bz2
......
[root@localhost tools]# ls
tar-1.23  tar-1.23.tar.bz2
[root@localhost tools]# cd tar-1.23
[root@localhost tar-1.23]# ls
ABOUT-NLS     build-aux   configure     gnu      Makefile.am  po       src
acinclude.m4  ChangeLog    configure.ac  INSTALL  Makefile.in  README   tests
aclocal.m4    ChangeLog.1  COPYING       lib      Make.rules   rmt      THANKS
AUTHORS       config.h.in  doc           m4       NEWS         scripts  TODO
复制代码
解压原文件包,可以发现其中包括了configure脚本和README文件。
[root@localhost tar-1.23]# mkdir -v ~/tar
mkdir: 已创建目录 “/root/tar”
[root@localhost tar-1.23]# ./configure --prefix=/root/tar
......
[root@localhost tar-1.23]# echo $?
0
复制代码
建立软件安装目录,并configure,检查configure返回结果,为0代表运行成功.
[root@localhost tar-1.23]# ls -F
ABOUT-NLS     ChangeLog.1     configure.ac  m4/          po/       tests/
acinclude.m4  config.h        COPYING       Makefile    README    THANKS
aclocal.m4    config.h.in     doc/          Makefile.am  rmt/      TODO
AUTHORS       config.log      gnu/          Makefile.in  scripts/
build-aux/    config.status*  INSTALL       Make.rules   src/
ChangeLog     configure*      lib/          NEWS         stamp-h1
复制代码
可以看到Makefile文件已经被成功建立.
[root@localhost tar-1.23]# less Makefile | grep install:
           || { echo "ERROR: files left after uninstall:" ; \
install: install-recursive
uninstall: uninstall-recursive
复制代码
在建立的Makefile中存在install和uninstall标号
[root@localhost tar-1.23]#make
......
[root@localhost tar-1.23]#echo &?
0
复制代码
make成功
[root@localhost tar-1.23]#make install
......
[root@localhost tar-1.23]# ls /root/tar
bin  libexec  sbin  share
[root@localhost tar]# cd /root/tar/bin
[root@localhost bin]# ls
tar
[root@localhost bin]# ./tar --help
......
[root@localhost tar-1.23]#echo &?
0
复制代码
安装并简单测试成功
分享到:
评论

相关推荐

    linux下从源代码安装32位的visit

    在Linux系统中,从源代码编译安装32位软件,特别是像Visit这样的专业可视化工具,需要遵循一系列步骤。这通常涉及到下载源代码、配置编译环境、编译源代码以及安装程序。以下是一个详尽的步骤指南: 1. **环境准备*...

    linuxcnc最新源代码

    总的来说,LinuxCNC最新源代码的获取意味着你有机会直接参与到一个前沿的数控系统项目中,不仅可以学习到先进的运动控制技术,还能提升你的软件开发能力,尤其是在实时系统和嵌入式领域的实践。对于任何对数控技术、...

    linuxptp源代码

    Linux PTP(Precision Time Protocol)源代码是用于在Linux操作系统中实现IEEE 1588标准的时间同步协议的软件库。这个源代码包是版本1.9.2,适合那些需要进行精确时间同步项目的开发者使用。PTP的主要目标是提供网络...

    linux下安装软件方法

    本文将详细介绍几种常见的Linux系统下的软件安装方式,并结合标签“源码”和“工具”,探讨如何通过源代码编译和使用工具来安装软件。 1. **软件包管理器**: Linux发行版通常内置了软件包管理器,如Ubuntu/Debian...

    如何在Linux系统下安装软件

    ### 如何在Linux系统下安装软件 #### 一、引言 在Linux系统中安装软件与Windows系统有所不同,尤其对于初次接触Linux的用户来说可能会感到困惑。本文将详细介绍如何在Linux系统下安装不同格式的软件,包括.rpm、....

    Linux下软件安装方法

    Linux下的软件通常以源代码或RPM(Red Hat Package Manager)包的形式提供,需要根据不同的情况进行安装。以下是两种常见安装方式的详细步骤: 1. **RPM包的安装** RPM包是Linux下的一种软件分发格式,尤其在Red ...

    linux0.01版本源代码

    在阅读Linux 0.01的源代码时,我们可以深入探究以下几个关键知识点: 1. **内核架构**:早期的Linux内核采用微内核设计,不过与现代的宏内核结构相比,它包含的功能非常基础,如进程管理、内存管理、中断处理等。...

    用Source Insight打开linux内核源代码

    1. Linux 内核源代码的获取:Linux 内核源代码可以从多种途径获取,在安装的 Linux 系统下,/usr/src/linux目录下的东西就是内核源代码。另外还可以从互联网上下载,解压缩后文件一般也都位于linux目录下。 2. ...

    Linux内核源代码情景分析.pdf---linux-2.4.0.tar.bz2--Source Insight 3

    《Linux内核源代码情景分析》这本书,结合了“linux-2.4.0.tar.bz2”这个特定版本的内核源码,为读者提供了深入学习Linux内核的宝贵资料。Source Insight 3是一款强大的源代码阅读和编辑工具,它可以帮助开发者高效...

    linux0.11内核源码

    它的开放源代码使得Linux0.11成为了计算机科学领域里的一个重要里程碑。 在Linux0.11内核的源代码中,包含了各种各样的文件,例如头文件、源文件、Makefile等。虽然它们都有不同的用途,但是它们的组合使得内核能够...

    Linux下安装软件工具

    对于一些高级用户或开发者,他们可能会选择从源代码编译安装软件。这需要安装必要的编译工具(如`gcc`,`make`等),然后下载源代码,解压,配置,编译和安装。例如: ``` wget <源码包URL> tar -xvf <源码包名>...

    linux内核源代码深度解析.zip

    linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码...

    linux 0.11 内核源码 - 免费下载

    linux 0.11 源码下载 本代码是目前能够找到的最早的Linux的...尽管Linux 0.11内核已经经历了多次更新和升级,但它的源代码仍被视为学习Unix/Linux内核的入门级材料。它是获取Unix/Linux内核设计经验和智慧的重要途径。

    LINUX内核源代码情景分析_linux_

    《LINUX内核源代码情景分析》一书深入探讨了Linux操作系统的核心——内核的源代码,揭示了其内部机制和工作原理。Linux内核是开源软件的典范,它的设计和实现为研究操作系统提供了宝贵的资源。以下是根据标题、描述...

    Linux系统管理技术实验8-linux下软件的安装和卸载.doc

    Linux 系统管理技术实验八 Linux 下软件的安装和卸载 本实验的目的是掌握 Linux 系统下软件的安装和卸载,包括使用 RPM 包安装、查询、删除软件的命令和过程,以及使用 Tarball 安装、查询、删除软件的命令和过程。...

    linux内核源代码情景分析.rar

    linux内核源代码情景分析.rar

    linux安装软件各种教程集合

    4. **源代码编译安装**:对于一些未在官方仓库中的软件或者最新版本的软件,用户可以选择从源代码编译安装。这通常涉及下载源码、解压、配置、编译和安装几个步骤,需要一些基础的Linux技能。 5. ** Snap 和 ...

    linux 0.11 源码下载

    下面将详细介绍Linux 0.11内核源码的主要组成部分及其工作原理。 一、进程管理 在Linux 0.11中,进程管理主要负责创建、调度和销毁进程。源码中的`process.c`文件包含了这部分的核心代码。它实现了基于轮转的简单...

    Linux 4.5源代码,包含windows下的解压软件7z

    Linux 4.5源代码是Linux内核发展过程中的一个重要版本,它包含了众多开发者们辛勤工作的成果,旨在提升系统的性能、稳定性和兼容性。Linux内核是操作系统的核心部分,负责管理硬件资源,提供系统调用接口给应用程序...

Global site tag (gtag.js) - Google Analytics