红联Linux门户
Linux帮助

老生常谈(linux下源码安装软件)

发布时间:2010-06-28 15:00:44来源:红联作者:奶茶dsk
[i=s] 本帖最后由 奶茶dsk 于 2010-7-8 01:01 编辑 [/i]

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

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

解压:

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

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

make:

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

当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,如果在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:[code]#make install[/code]
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工具的过程,权当做是上面这些步骤的一个具体事例吧:[code][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.[/code]这个是我的系统信息。[code]
[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
[/code]解压原文件包,可以发现其中包括了configure脚本和README文件。[code]
[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[/code]建立软件安装目录,并configure,检查configure返回结果,为0代表运行成功.[code]
[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[/code]可以看到Makefile文件已经被成功建立.[code]

[root@localhost tar-1.23]# less Makefile | grep install:
|| { echo "ERROR: files left after uninstall:" ; \
install: install-recursive
uninstall: uninstall-recursive[/code]在建立的Makefile中存在installuninstall标号[code][root@localhost tar-1.23]#make
......
[root@localhost tar-1.23]#echo &?
0[/code]make成功[code][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[/code]安装并简单测试成功

再?嗦2句:
1.确切的明白自己想要做什么以及正在做什么.
2.开源界名言"RTFM"!!


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一个补充:
引用:
可是我的没有./configure,也不能用make是怎么回事呢,楼主?是不是linux版本不对呢?
846969004 发表于 2010-7-1 18:03


引用:

2种可能:
1,您下载的不是源码包,有可能是可以直接运行的二进制包
2,配置脚本不是configure


2种情况都可以在README或INSTALL文档中一探究竟,,{:3_115:}
奶茶dsk 发表于 2010-7-1 21:05


引用:



第二种我见过,7-zip没有配置脚本,直接make就行了
pl_014 发表于 2010-7-3 12:56


再次强调一下README!
2010//6//28 奶茶dsk
文章评论

共有 93 条评论

  1. huchengjian 于 2011-05-05 11:56:07发表:

    不错的分享

  2. Yangfn 于 2011-05-03 22:43:39发表:

    引用:
    写的真多,先顶一下,不过源代码安装最让人头疼的是解决依赖关系,和编译选项,这个好像必须看README或INSTALL这一类的文件才行
    pl_014 发表于 2010-7-1 08:48

  3. tangzhongchun 于 2011-04-21 17:48:56发表:

    也不知道,因为我还是新新手的原因,有的软件下的是源代码,能用./configure,但是之后不能make,比如说 stardict。

  4. gogo11 于 2011-04-19 12:45:13发表:

    依赖问题最讨厌了~~~~~~~~~~~`

  5. tenguin 于 2011-04-19 00:46:18发表:

    好文不想顶都不行

  6. qamallan 于 2011-04-01 16:26:01发表:

    好东西,支持

  7. xlm716 于 2011-03-14 21:09:22发表:

    太适合我们这种菜鸟了

  8. wangjianli 于 2011-02-28 10:37:37发表:

    感谢楼主分享

  9. maxuedong 于 2011-02-27 17:53:50发表:

    学习了

  10. zhaoweichao 于 2011-02-26 11:42:40发表:

    这篇文章 我怎么才能收藏呢?方便以后我在找到?

  11. nil13 于 2011-01-18 23:25:53发表:

    好文章,学习了

  12. ba0zhu 于 2011-01-14 15:37:56发表:

    很好。。。。谢谢

  13. 294104551 于 2011-01-04 09:46:53发表:

    呵呵 源码安装还没成功过

  14. aiguo110 于 2011-01-03 14:29:17发表:

    Could not find bison

  15. aiguo110 于 2011-01-03 14:20:46发表:

    很好

  16. ruthless369 于 2010-11-30 18:14:49发表:

    顶啊,今天我才看到。

  17. 我来迟了 于 2010-11-13 16:39:01发表:

    一份很不错的文档..
    值得收藏..

  18. chqunlin 于 2010-10-16 09:26:24发表:

    学习中。。。。。。

  19. wozdaixxma 于 2010-10-02 21:50:44发表:

    收藏了,谢谢!

  20. onlineuser 于 2010-09-29 23:58:19发表:

    不错,很详细 备份了。

  21. 雪域留然 于 2010-09-29 19:22:06发表:

    谢谢阿,正在为这个苦恼中

  22. 昊昊荡荡 于 2010-08-15 17:15:14发表:

    好东西,收藏了!

  23. mayiqiji 于 2010-08-14 11:16:54发表:

    还要说声谢谢!谢谢分享经验!!!

  24. mayiqiji 于 2010-08-14 11:16:24发表:

    俺是菜鸟,想问一下大侠:能不能把Linux装在移动硬盘上?

  25. mayiqiji 于 2010-08-14 11:15:38发表:

    路过,学习一下!

  26. liuhengjin 于 2010-08-13 18:07:41发表:

    受益匪浅啊

  27. liuhengjin 于 2010-08-13 10:46:44发表:

    辛苦了

  28. liuhengjin 于 2010-08-13 10:42:37发表:

    好贴啊,谢谢

  29. pallana 于 2010-08-06 02:31:16发表:

    支持,好文章阿

  30. 奶茶dsk 于 2010-08-06 01:39:40发表:

    27# egg206

    不是这个原因,,不知道少了什么库,,找rpm包安装吧,,或者adobe reader 也8错,,

  31. egg206 于 2010-08-05 14:35:40发表:

    # ./FoxitReader
    ./FoxitReader: symbol lookup error: ./FoxitReader: undefined symbol: gtk_tool_item_set_tooltip_text
    我的Linux是RHEL5.5,这个是for Desktop Linux的,是不是不能在RHEL5.5下安装呢。

  32. 奶茶dsk 于 2010-08-05 10:53:21发表:

    引用:
    BZ2 Package

    This is for those who are using the linux version which is not mentioned above.
    Unzip the package and run the "FoxitReader" file directly.

    直接在当前目录下运行[code]./FoxitReader[/code],,,

  33. egg206 于 2010-08-05 10:47:19发表:

    [i=s] 本帖最后由 egg206 于 2010-8-5 10:59 编辑 [/i]

    看了看Readme也没搞明白具体怎么装,好像是把帮助文件、字体显示及字体复制到相关目录里去。本人E文比较差。我把附件发上来,大家给看看。
    [attach]31719[/attach]

  34. egg206 于 2010-08-04 16:43:26发表:

    [i=s] 本帖最后由 egg206 于 2010-8-4 16:45 编辑 [/i]

    我发一个没有configure的FoxitReader-1.1.0.tar.bz2包,解压后文件如下:
    FoxitReader fpdfcjk.bin fum.fhd po(这个是文件夹) Readme.txt

    直接make不行,看来是第1种情况,还真不会安装,请大家指教!

  35. egg206 于 2010-08-04 16:16:22发表:

    好贴收藏了。

  36. sinly1225 于 2010-08-04 14:26:29发表:

    初来乍到,学习

  37. 奶茶dsk 于 2010-07-08 01:03:09发表:

    打上一个补丁,希望大家各抒己见,争取让源码安装相关的求助帖彻底消失,,(6)m:b

  38. 咖啡男孩 于 2010-07-05 09:53:32发表:

    这么好的文章怎么就这么点浏览量?版主置顶吧……

  39. wangyu 于 2010-07-03 22:46:28发表:

    引用:



    第二种我见过,7-zip没有配置脚本,直接make就行了
    pl_014 发表于 2010-7-3 12:56

    rar for linux也是,我现在就用的,不过安装太简单了,没什么说的了

  40. pl_014 于 2010-07-03 12:56:39发表:

    引用:

    2种可能:
    1,您下载的不是源码包,有可能是可以直接运行的二进制包
    2,配置脚本不是configure

    2种情况都可以在README或INSTALL文档中一探究竟,,{:3_115:}
    奶茶dsk 发表于 2010-7-1 21:05



    第二种我见过,7-zip没有配置脚本,直接make就行了