- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Linux系统下 源码软件最简单的安装方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包,不同的最终用户经过编译就可以正确运行,这也是非常符合c语言的设计哲学的,一次编写,到处编译么,而常见的二进制包,比如rpm和deb,软件开发者必须为每种特定的平台定制好专门的软件包,这个通过rpm文件的后缀名就可以初见端倪,比如ppc,sparc,i386之类,在这里不做过多的陈述,其实源码安装软件远没有很多朋友想象的那么复杂,下面我在这里尽可能详细的做一些陈述,如有谬误,欢迎朋友们拍砖! 安装的具体步骤:
___FCKpd___0nbsp;tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)___FCKpd___0nbsp;cd XXXX___FCKpd___0nbsp;./configure___FCKpd___0nbsp;make# make install
___FCKpd___1nbsp;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压缩后发布的,当然这两个步骤可以通过一条命令实现
___FCKpd___2nbsp;tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
复制代码 。
解压的相关命令如下
___FCKpd___3nbsp;tar zxvf XXXX.tar.gz___FCKpd___3nbsp;tar jxvf XXXX.tar.bz2
复制代码 。
./configure:
解压完成就正式开始安装了(补充一点,开始configure之前,如有必要,请使用patch工具为源码打上相应的补丁),首先跳转到源码的解压目录,众所周知,开始configure前还是应该仔细阅读源码目录下的README或者INSTALL文件,好多安装中的注意事项在这里都有所罗列,configure实际上是一个脚本文件,在当前目录中键入"./configure",shell就会运行当前目录下的configure脚本,有一点必须说明,在整个configure过程,其实编译尚未进行,configure仅仅是做编译相关的准备工作,它主要对您当前的工作平台做一些依赖性检查,比如编译器是否安装,连接器是否存在,如果在检测的过程没有任何错误,你很幸运,configure脚本会在当前目录下生成下一步编译链接所要用到的另一个文件Makefile,当然configure支持及其丰富的命令行参数,可以键入"./configre --help"获取具体的信息,最常用的恐怕就是
___FCKpd___5nbsp;./configure --prefix=/opt/XXX
它用来设置软件的安装目录. make: 如果configure过程正确完成,那么在源码目录,会生成相应的Makefile文件,Makefile文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是make所做的,make只是一个通用的工具,一般情况下,make会根据Makefile中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序
___FCKpd___6nbsp;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/issueCentOS release 5.4 (Final)[root@localhost ~]# uname -srLinux 2.6.18-164.el5[root@localhost ~]# gcc --versiongcc (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]# lstar-1.23.tar.bz2[root@localhost tools]# tar jxvf tar-1.23.tar.bz2......[root@localhost tools]# lstar-1.23 tar-1.23.tar.bz2[root@localhost tools]# cd tar-1.23[root@localhost tar-1.23]# lsABOUT-NLS build-aux configure gnu Makefile.am po srcacinclude.m4 ChangeLog configure.ac INSTALL Makefile.in README testsaclocal.m4 ChangeLog.1 COPYING lib Make.rules rmt THANKSAUTHORS config.h.in doc m4 NEWS scripts TODO
解压原文件包,可以发现其中包括了configure脚本和README文件.
[root@localhost tar-1.23]# mkdir -v ~/tarmkdir: 已创建目录 “/root/tar”[root@localhost tar-1.23]# ./configure --prefix=/root/tar......[root@localhost tar-1.23]# echo $?
建立软件安装目录,并configure,检查configure返回结果,为0代表运行成功. 。
[root@localhost tar-1.23]# ls -FABOUT-NLS ChangeLog.1 configure.ac m4/ po/ tests/acinclude.m4 config.h COPYING Makefile README THANKSaclocal.m4 config.h.in doc/ Makefile.am rmt/ TODOAUTHORS 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-recursiveuninstall: 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/tarbin libexec sbin share[root@localhost tar]# cd /root/tar/bin[root@localhost bin]# lstar[root@localhost bin]# ./tar --help......[root@localhost tar-1.23]#echo &?
0 。
安装并简单测试成功.
最后此篇关于Linux系统下 源码软件最简单的安装方法的文章就讲到这里了,如果你想了解更多关于Linux系统下 源码软件最简单的安装方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
ACO.Visualization项目 本项目演示蚁群算法求解旅行商问题的可视化过程,包括路径上的信息素浓度、蚁群的运动过程等。项目相关的代码:https://github.com/anycad/A
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我需要用Sql数据库制作并包含的PHP票务系统源码用户客户端和管理员。我需要个人 CMS 的这个来源。谢谢你帮助我。 最佳答案 我在不同的情况下使用了 osticket。 这里: http://ost
我的场景:我想在日志文件中写入发生异常的部分代码(例如,发生异常的行前 5 行和行后 5 行 - 或者至少是该方法的所有代码)。 我的想法是用 C# 代码反编译 pdb 文件,并从该反编译文件中找到一
RocketMQ设定了延迟级别可以让消息延迟消费,延迟消息会使用 SCHEDULE_TOPIC_XXXX 这个主题,每个延迟等级对应一个消息队列,并且与普通消息一样,会保存每个消息队列的消费进度
先附上Hystrix源码图 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和
此篇博客学习的api如标题,分别是: current_url 获取当前页面的url; page_source 获取当前页面的源码; title 获取当前页面的titl
? 1 2
1、前言 作为一个数据库爱好者,自己动手写过简单的sql解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你
gory"> 目录 运行时信号量机制 semaphore 前言 作用是什么 几个主要的方法 如何实现
自己写的一个评论系统源码分享给大家,包括有表情,还有评论机制。用户名是随机的 针对某一篇文章进行评论 function subcomment() {
一、概述 StringBuilder是一个可变的字符串序列,这个类被设计去兼容StringBuffer类的API,但不保证线程安全性,是StringBuffer单线程情况下的一个替代实现。在可能的情
一、概述 System是用的非常多的一个final类。它不能被实例化。System类提供了标准的输入输出和错误输出流;访问外部定义的属性和环境变量;加载文件和库的方法;以及高效的拷贝数组中一部分元素
在JDK中,String的使用频率和被研究的程度都非常高,所以接下来我只说一些比较重要的内容。 一、String类的概述 String类的声明如下: public final class Str
一、概述 Class的实例代表着正在运行的Java应用程序的类和接口。枚举是一种类,而直接是一种接口。每一个数组也属于一个类,这个类b被反射为具有相同元素类型和维数的所有数组共享的类对象。八大基本树
一、概述 Compiler这个类被用于支持Java到本地代码编译器和相关服务。在设计上,这个类啥也不做,他充当JIT编译器实现的占位符。 放JVM虚拟机首次启动时,他确定系统属性java.comp
一、概述 StringBuffer是一个线程安全的、可变的字符序列,跟String类似,但它能被修改。StringBuffer在多线程环境下可以很安全地被使用,因为它的方法都是通过synchroni
一、概述 Enum是所有Jav中枚举类的基类。详细的介绍在Java语言规范中有说明。 值得注意的是,java.util.EnumSet和java.util.EnumMap是Enum的两个高效实现,
一、概述 此线程指的是执行程序中的线程。 Java虚拟机允许应用程序同时执行多个执行线程。 每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行。 每个线程可能也可能不会被标记为守
一、抽象类Number 类继承关系 这里面的原子类、BigDecimal后面都会详细介绍。 属性和抽象方法 二、概述 所有的属性,最小-128,最大127,SIZE和BYTES代码比
我是一名优秀的程序员,十分优秀!