- 浏览: 948635 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
摘自:http://www.linuxdiyf.com/bbs/thread-181890-1-1.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 install:
make:
如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:
$ make
当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,如果在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包,不同的最终用户经过编译就可以正确运行,这也是非常符合c语言的设计哲学的,一次编写,到处编译么,而常见的二进制包,比如rpm和deb,软件开发者必须为每种特定的平台定制好专门的软件包,这个通过rpm文件的后缀名就可以初见端倪,比如ppc,sparc,i386之类,在这里不做过多的陈述,其实源码安装软件远没有很多朋友想象的那么复杂,下面我在这里尽可能详细的做一些陈述,如有谬误,欢迎朋友们拍砖!
安装的具体步骤:
解压:
最常见源码包的就两种(XXXX.tar.gz or XXXX.tar.bz2),其实这些源码包都是由2个工具压缩而成的,tar.gz结尾的文件用到的工具是tar和gunzip,而tar.bz2结尾的文件所使用的工具是tar和bzip2,之所以这样做是因为,tar仅仅能够打包多个文件但是没有压缩的功能,而gz和bz2却刚好相反,仅能够压缩单个文件,这样我们常见的源码包实际上是通过tar先将不同的源文件打包,然后再通过gunzip或者bzip2压缩后发布的,当然这两个步骤可以通过一条命令实现:
./configure:
解压完成就正式开始安装了(补充一点,开始configure之前,如有必要,请使用patch工具为源码打上相应的补丁),首先跳转到源码的解压目录,众所周知,开始configure前还是应该仔细阅读源码目录下的README或者INSTALL文件,好多安装中的注意事项在这里都有所罗列,configure实际上是一个脚本文件,在当前目录中键入"./configure",shell就会运行当前目录下的configure脚本,有一点必须说明,在整个configure过程,其实编译尚未进行,configure仅仅是做编译相关的准备工作,它主要对您当前的工作平台做一些依赖性检查,比如编译器是否安装,连接器是否存在,如果在检测的过程没有任何错误,你很幸运,configure脚本会在当前目录下生成下一步编译链接所要用到的另一个文件Makefile,当然configure支持及其丰富的命令行参数,可以键入"./configre --help"获取具体的信息,最常用的恐怕就是:
make:
如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:
make install:
当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到root是一个不错的选择,"install"只是Makefile文件中的一个标号,"make install"代表着make工具执行Makefile文件中"install"标号下的所有相关操作,如果在configure阶段没有使用"--prefix=/opt/XXX"指定应用程序的安装目录,那么应用程序一般会被默认安装到/usr/local/bin,如果/usr/local/bin已经存在于您的PATH中,那么安装已经基本结束:
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
安装并简单测试成功
发表评论
-
tomcat jvm 参数说明
2013-12-17 09:50 1545maxThreads=”1000″ enableLookup ... -
SecureCRT常用快捷键设置
2013-11-27 08:36 2751http://www.tatujia.com 1:如果不 ... -
自动拒绝恶意IP远程登录Linux服务器脚本
2013-09-19 13:00 1273http://wgkgood.blog.51cto.com/ ... -
帮助中心分类 新闻公告 (10) Windows VPS教程 (13) Linux VPS教程 (28) 其他 (1) linux中Cron定时任务系统命令详解
2013-05-21 17:46 1014有很多同学在购买VPS之后,需要用到计划任务.但是又对计划任 ... -
Nginx配置文件nginx.conf中文详解
2013-04-03 10:29 928#定义Nginx运行的用户和用户组user www www ... -
nginx配置相关文章
2013-04-03 10:29 935nginx配置相关文章 http://developer ... -
Nginx日志自动切割脚本
2013-04-03 10:29 1011说明:每隔7天执行一次,使用crontab自动运行脚本,请 ... -
centos 6.2 64位安装nginx php mysql
2013-04-03 10:30 1799平台环境http://jiyunjie.blog.51ct ... -
centos nginx安装教程
2013-04-02 13:50 10741.安装 默认安装到/usr/local/ng ... -
Linux中iptables设置详细
2012-09-28 14:13 1572无论如何,iptables是一个需要特别谨慎设置的东西,万 ... -
CentOS 5.6Final下FTP安装及配置 .
2012-09-27 10:07 1237My Scripts: [root@localhost ~] ... -
CentOS5.6 安装JDK
2012-09-27 10:05 1015首先通过界面卸载OpenJDK.然后卸载默认的jdk1.42 ... -
Java获取客户端真实IP地址的两种方法
2012-09-13 13:08 1026在JSP里,获取客户端的IP地址的方法是:request.ge ... -
令 Nginx 后端的 Apache 获取到互联网 IP
2012-09-13 10:58 1921http://blog.csdn.net/songerzhou ... -
让tomcat支持2级域名共享session
2012-09-13 10:46 1032tomcat默认情况下是不支持2级域名共享session的,所 ... -
nginx防盗链配置
2012-08-21 13:22 1251以下配置一般可称为图片防盗链配置,如果是mp3这种文件,我现在 ... -
将nginx同时作为负载均衡和Web缓存服务器
2012-02-13 11:11 1201http://server.51cto.com/sColleg ... -
nginx 代理模式下,获取客户端真实IP
2011-11-30 09:42 4856最近做博友推荐,发现个小问题,用$_SERVER['REMOT ... -
nginx相关文章地址收集
2011-11-04 14:07 1044http://bbs.chinaunix.net/thread ... -
LVS+keeplived+nginx+tomcat高可用、高性能jsp集群
2011-11-04 10:31 2092摘自:http://kerry.blog.51cto.com/ ...
相关推荐
PuTTY_ssh工具在Linux下的应用和中文乱码解决办法 PuTTY是一个准绿色软件,不需要安装,可以直接使用。虽然 PuTTY 的所有配置都保存到了注册表,但可以通过运行时指定参数 -cleanup 来清除 PuTTY 的所有配置信息。 ...
在linux下安装scala环境很简单, 如果是ubuntu环境, 那就更简单了, 直接apt-get搞定, 我就是用的ubuntu. java/scala系都需要基于jdk, 所以首先要安装jdk. 1. 安装jdk, 老生常谈, 不值得一说。 2. 安装scala, ...
大数据持续升温, 不熟悉几个大数据组件, 连装逼的口头禅都没有。 最起码, 你要会说个hadoop, ... jdk已经是很俗气的老生常谈了, 不多说, 用java/scala的时候可少不了。 ubuntu@VM-0-15-ubuntu:~$ java -version op
老生常谈外链 站长要做到对症下药.pps
C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,...
Java设计模式是在特定环境下,为了解决某类重复出现的问题而总结出来的一套成功或有效的解决方案。这些设计模式旨在提高代码的可重用性、可维护性和可扩展性。 设计模式通常包含以下几个关键要素: 模式名称:通过一...
正如标题所言,《电子技术的老生常谈——接地》一文中提到的那样,尽管接地的基本概念在每一次培训和交流中都会被提及,但往往缺乏一个通用而全面的方法论指导。本文旨在深入探讨接地的各种类型、目的以及具体的实施...
符合软件开发计划时间框架的软件测试计划软件测试计划是一个老生常谈的问题了,不同的人对计划的理解往往是大相径庭的。这里让我们回顾一下何为计划,一般来 软件测试管理的基本要素有哪些 软件测试 本文将就软件...
ProgressBar和ProgressDialog是Android开发中常见的两种进度条控件,用于展示任务执行的进度或等待状态。下面我们将深入探讨这两种控件的用法。 首先,ProgressBar是一个可以显示具体进度的组件,它可以是圆形或...
在进行JavaScript编程的过程中,面向对象思想一直是一个核心的概念。面向对象编程(OOP)是通过创建对象来模拟现实世界的一种编程范式。在JavaScript中,对象可以通过不同的方法创建和定义。面向对象有三大基本特性...
服务器选择什么版本的linux,这个问题是个老生常谈的问题,每个月都有人讨论,根据我运维过1000台 server的经验,回答如下
符合软件开发计划时间框架的软件测试计划软件测试计划是一个老生常谈的问题了,不同的人对计划的理解往往是大相径庭的。这里让我们回顾一下何为计划,一般来说 软件测试管理的几个基本要素 软件测试 本文将就软件...
当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...
当一个触摸事件发生时,事件会按照View的层次结构自顶向下进行传递,这个过程可以类比为公司内部的任务分配。事件首先由父View(如ViewGroupA)接收到,然后决定是否将事件传递给其子View(如ViewGroupB)或者直接...
符合软件开发计划时间框架的软件测试计划软件测试计划是一个老生常谈的问题了,不同的人对计划的理解往往是大相径庭的。这里让我们回顾一下何为计划,一般来说计划的目的是用来识别任务,分析风险,规划资源和确定 ...
首先我们需要安装Photoshop的一个插件(下载链接在文章结尾处),把它拷贝在Photoshop安装目录下的Plug-Ins文件夹里就能使用了。记得要重新打开Photoshop才会显示。 打开Photoshop后就会在储存的格式中找到ICO的图标...
符合软件开发计划时间框架的软件测试计划软件测试计划是一个老生常谈的问题了,不同的人对计划的理解往往是大相径庭的。这里让我们回顾一下何为计划,一般来说计划的目的是用来识别任务,分析风险,规划资源和确定 ...
相比之下,Log4j2就比较简单,我们只需要把log4j2.xml文件放到工程的resource目录下就行了。 Log调用 Log4j和Log4j2的调用都是很简单的。Log4j需要import org.apache.log4j.Logger;然后使用Logger.getLogger()方法...