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

解压:
有两个最常见的源包(www.mageym.com.tar.gz 或 XXXX.tar.bz2)。 实际上,这些源码包是由两个工具压缩的。 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前,如有需要请使用补丁工具给源码打上相应的补丁),首先跳转到源码解压目录,众所周知 , 开始configure前要仔细阅读源码 目录下的README或INSTALL文件,这里列出了很多安装注意事项,configure其实是一个脚本文件,在当前目录下输入“./configure”,shell就会运行 当前目录下的configure脚本,有一点要说明,在整个configure过程中,还没有进行编译,configure只是做编译相关的准备工作,主要是对你当前工作做一些依赖检查 平台,如编译器是否安装,链接器是否存在,如果检测过程没有错误,你是幸运的,configure脚本 将在当前目录下生成另一个文件 Makefile 用于下一次编译和链接。 当然configure支持它丰富的命令行参数,你可以输入“./configre –help”来获取具体信息,最常用的大概有:

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

用于设置软件的安装目录。

制作:
如果配置过程正确完成,则会在源目录中生成相应的 Makefile。 Makefile 仅包含一组文件依赖项以及编译和链接的相关步骤。 事实上,真正的编译和链接工作并不是由 make 完成的。 是的,make 只是一个通用工具。 一般来说,make会根据Makefile中的规则调用相应的编译器,编译所有依赖于当前软件的源代码,生成所有相关的目标文件,最后使用链接器生成最终的Executable程序:

  1. $ make

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

  1. #make install

make clean:
make uninstall:

这两个步骤只是安装的后续操作。 需要注意的是,“clean”和“uninstall”也是Makefile中对应的两个标签。 在执行这两个步骤时,Makefile 必须保留,并且“make clean”用于在编译和链接过程中清除一些临时文件。 “make uninstall”是卸载相关应用程序。 和make install类似,make卸载也需要切换到root才能执行,但是很多Makefile中都省略了“卸载”标签,小伙伴们。 我们可以在对应的Makefile中自行查找。

为什么?
这里我试着解释一下上述步骤存在的原因。 从C语言的角度来看,一个程序要想从源代码正确生成相关的可执行文件,以下几个部分是必不可少的:源文件、编译器、汇编器、链接器、依赖库,通过以上步骤,朋友们应该已经知道了 只有一步(make)来实际执行编译和链接操作。 其他步骤存在的原因是什么?
有一点是肯定的,我用C语言在我的电脑上写了一些自娱自乐的小程序,并没有使用“configure or make install”之类的命令。 最多我自己写一个Makefile来管理源文件。 依赖,但软件开发者不同,他必须考虑软件的可移植性,他开发的软件不能只在自己的电脑上运行,对吧? 不同的平台甚至可能有不同的硬件架构,这导致 Makefile 的不可移植性。 为了解决这个问题,开发者通常会使用autoconf等工具生成对应的configure脚本,configure脚本用来屏蔽对应的平台差异,从而正确生成Makefile文件,然后make完成编译和链接工作 根据configure的劳动成果(Makefile)。
至于“安装或清理或卸载”,只对应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

安装并简单测试成功

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!