编译安装软件就那么回事儿

编译软件
ubuntu仓库有着成千上万的软件,如果加上第三方的仓库,你可以得到更多!然而,有些情况下,可能需要你通过源码来编译安装软件(相关指导请移步Compiling Easy How To ):

1、仓库中的软件包不可用;

2、仓库中的软件包太旧了;

3、仓库中的软件包,因某些原因导致程序的个别功能不可用;

4、仓库中的软件包可能有些bug被所有者修复了;

5、你想通过测试来帮助作者修复某些bug;

6、或者只是你想从头开始,试试手动编译一个程序;

环境

你需要根据写成相关程序的语言,来编译软件。被要求编译的应用程序通常是由C和C++写成的,在这种情况下,你需要安装编译器gcc,可以通过安装build-essential软件包来获取。通常情况下,你需要下面的命令操作来实现:

sudo apt-get install build-essential

为了能够运行configure和autogen.sh文件,需要更多的程序:

sudo apt-get install automake

最后,需要CheckInstall安全的将程序装载到你的系统中:

sudo apt-get install checkinstall

如果程序是由java写成的,那么你还需要一个java run-time和compiler。你可以根据java页的说明来安装java。有时候需要一个基于构建工具ant的java,软件包可以从ubuntu仓库获得:

sudo apt-get install gcj

如果程序是由解释语言写成的,比如python和perl,那么你仅仅需要一个解析器,这个是ubuntu默认安装的,你可以直接运行程序,绝大多数情况下,你可以直接从ubuntu仓库中安装那些为了运行程序而必须的python和perl程序。更多解释语言的情报请参考文章结尾!

你真的需要编译吗?

如果你编译软件只是因为软件仓库里的不可用,那么请在Ubuntu Package Search中搜索软件包!很多作者同时也制作了他们自己的PPA,它们也可以被添加到你的软件源里。许多作者制作的PPA源的地方是Launchpad ,你也可以通过命令行,使用下面的命令搜索相关软件的keyword(当然了,请使用实际术语代替keyword)!

apt-cache search <keyword>

获取源

通常,源码包会以作者自己网站的某种形式来提供!通常的格式是tar.gz和tar.gz2或者zip。你可以使用文件解压缩工具,通过下面的命令来解压他们:

tar -xvf file.tar.gz tar -xvf file.tar.bz2 unzip file.zip
有时候,也需要使用CVS剪切边缘代码,你可以通过sudo apt-get install cvs来安装CVS。例如,检索NetworkManager的源码,写出下面的命令:

cvs -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login
cvs -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co NetworkManager

如果你是从CVS安装,请参阅文章最后的介绍。

很多软件包,可以使用Bazaar(sudo apt-get install bzr)从upstream获取当前的代码,而无需手动查找版本控制位置。例如:

bzr get lp:network-manager

三步编译

绝大多数linux上需要源码安装的程序可以通过./configure;make;make install这三步来实现安装,而最困难的一步往往都在./configure这一步,那后面的几步是可以很轻松的完成的。

Configure

configure是用来做下面这些事的一个脚本:
1、用以检查计算机建立包所必须的完整性;

2、帮助你根据需要改变默认的路径;

3、用以激活/禁用编译程序中的各种选项;

4、用以改变程序将要被安装的路径;
你可以通过执行下面的命令来查看特定configure脚本所提供的选项个功能:

./configure --help | less

例如,默认的configure脚本会指定安装到/usr/local下面,如果你想改变路
径,可以执行下面显示的configure脚本命令:

./configure --PREFIX=/opt

如果你真的想从零开始编译,可以认真研读一下README或者INSTALL文件。你会看到需要什么样的软件碎片,比起在包系统中,在这些文件中他们通常有着不一样的名字。接下来,可以通过使用apt-cache工具来寻找相应的包。如果你已经通过仓库中编译包,那么还有一个诀窍,就是通过下面的命令来安装包的依赖:

sudo apt-get build-dep <package>

这可以确保所有所需的包以来都可以被安装,以期configure不会由于过旧的依赖包而报错,否则你将不得不继续编译相关的依赖。

寻找并修复configure的故障

恰巧在下面这几种情况下,configure可能会失败:
1、编译的时候需要-dev包;

2、要编译GNOME应用那么需要相应的gnome-level;而编译KDE应用则需要kde-level;

3、C和C++库的名称总是以lib开头,因此,如果./configure报错说丢失了库foo,那么你需要安装libfoo-dev包;

4、如果configure说要“X includes”,那么你可能需要安装下面这些包“xlibs-dev,xlibs-static-dev,x-window-system-dev”,注意,有时候,仅仅需要xorg-dev和x-dev就可以了。-Racecar56 Under Jaunty则需要安装xorg-dev和libx11-dev。

5、查看哪些包被需要的技巧,可以使用auto-apt工具或者apt-file工具(auto-apt可能更快一些):

sudo apt-get install auto-apt sudo auto-apt update auto-apt search missing-file.h

使用auto-apt和上面是一样的,如果把auto-apt替换成auto-apt!

6、如果编译软件禁用失败的选项,可以使用./configure –disable-FEATURE选项。

7、如果你自己没能修复你遇到的问题,你也可以寻求ubuntu官方的帮助哦。
如果根本不存在configure的文件,那么最好查看一下configure.ac文件(有必要认真阅读一下INSTALL和README文件),如果configure.ac文件存在,那就是开发者忘记创建最终configure文件了,你可以自己创建,不过需要autoconf包:

sudo apt-get install autoconf

安装成功之后,键入:

autoconf

如果幸运的话,一个可工作的configure文件应该被创建了。

编译

可喜可喝,configure步骤已经完成了,真正的编译安装可以开始了。非常简单:

make

现在如果一切顺利的话,你应该的到了一个可工作的程序copy在你的源目录下,你可以运行下面的命令来试用一下:

src/program_name

如果程序这一步失败了,那么就有可能是程序的bug,这时候你最好联系一下作者,告诉他程序的问题。

安装软件包

如果一切进展顺利的话,你可以键入下面的命令来安装程序:

sudo checkinstall

使用CheckInstall可以创建一个.deb包,这货稍后可以很容易被移除哦!

然而,由于某些原因,你不想使用CheckInstall,这是安装的最后方法(不推荐):

sudo make install

注意:

1、如果程序是内核的一个组件,那么还需要gcc-3.4(on breezy)和kernel-headers,他们稍后可以使用sudo apt-get install gcc-3.4 linux-headers-$(uname -r)来安装。请注意,每内核升级后,那么内核组件也必须重新编译,而新的header也必须重新下载。要编译完整内核,请参见KernelCompile。

2、如果你想重新编译已经存在的debian的软件包,可以使用dpkg-buildpackage -rfakeroot,如果个别包丢失了,build script会告诉你包的名字!

3、如果你从revision control (CVS, Bazaar, 等.)进行编译,通常需要获取revision control的源码,之后增加一个步骤,运行autogen.sh脚本,为你生成configure脚本。

解释语言

通常解释语言在必须组件未安装的情况下会运行失败。

1、perl组建通常类似于foo::bar(例如xml::parser),然而,它的包为称为ibfoo-bar-perl(libxml-parser-perl),通过apt-cache搜索可以帮助找到名称稍许变化的文件,例如:

apt-cache search foo | grep bar apt-cache search xml | grep parser

2、python组件被称作python-module,因此python mysql组建被称作python-mysqldb,映射在这里少有一致,apt-cache可以给一些帮助!像这样搜索一下:

apt-cache search python | grep mysql

通常所需帮助文档在被要求安装的组件当中!

3、ruby组件的命名和perl有些类似,因为activesupport是libactivesuport-ruby[1.8|1.9](如果没有特别要求,默认是1.8)。当然了,你也可以安装ruby包管理平台rubygems,然而,debian/ubuntu关闭了一些升级功能,确保rubygems可以使用apt正常工作。如果你想保持ruby的最新版本,可以看一下RubyOnRails。

apt-cache search ruby | grep activesupport

评论

为了找到更好的技巧,你可以考虑在CompilingEasyHowTo获取更加有好的帮助。而且,你会发现CheckInstall也是很有帮助的:

1、checkinstall不是文档中描述的默认方法?有些人刚开始编译的时候不喜欢使用checkinstall,有原因吗?

修改每一页,我都是相当的谨慎,我希望大家都能同意!

2、file-roller不能用来解压文件?没有人必须要记住“-jxvf”!请介绍一些尽可能简单的操作工具,高级用户可以在数百万的网络文档里找到命令行的捷径,“this”文档应该只提供明了的方法,这样可以让大家更注重其ubuntu来,而且也可以更容易的运行那些鲜为人知的软件包!

实际上,“tar xf file”已经足够了,GNU tar已经可以自动探测并解压缩它们了。如果用户想要详细的输入信息,则可以使用"tar xvf file"。要是shell中编译的最后几步在提供一个GUI步骤,可能导致更为严重的问题!
文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-08-04 10:52:46

编译安装软件就那么回事儿的相关文章

RHEL 5.4编译安装LAMP

一 什么是LAMP LAMP是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件: Linux,操作系统: Apache,网页服务器: MySQL,数据库管理系统(或者数据库服务器): PHP和有时Perl或Python,脚本语言. 二 准备编译安装的环境 在linux系统上,编译安装软件,需要一个编译环境,通常是使用gcc,所以一定要确认gcc已经安装,编译的时候,有一些软件还依赖于某些开发工具库文件,所以,要把这些常用的开发库安装上,如果使用rpm来安装的话,难免遇到依赖关系,

在CentOS 6.0中Apache+MySQL+PHP+Zend最小化编译安装

操作系统:CentOS 6.0&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 32位 下载地址:http://mirrors.163.com/centos/6.0/isos/i386/CentOS-6.0-i386-bin-DVD.iso 安装方式:采用最小化安装,在安装系统的时候选择Minimal (CentOS 6.0默认就是Minimal安装模式,不含有任何可选安装包) 最小化安装完成之后,系统占用900M

CentOS 6.3 安装配置Apache2.2.6的方法(源码编译安装)_Linux

安装说明安装环境:CentOS-6.3 安装方式:源码编译安装 软件:httpd-2.2.6.tar.gz | pcre-8.32.tar.gz | apr-1.4.6.tar.gz | apr-util-1.5.1.tar.gz 下载地址:http://mirror.bjtu.edu.cn/apache/httpd/ http://apr.apache.org/download.cgi http://jaist.dl.sourceforge.net/project/pcre/pcre 安装位置

CentOS系统下编译安装MySQL以及设置相关yum源的教程_Mysql

编译安装软件通常会遇到各种问题,尤其是在编译lamp这样的多种软件协同工作时各软件还相互影响,尤其是之前安装的软件会影响后边程序的编译安装,出现这种问题常常是之前安装的软件没有导出库文件和头文件,因而导致后面的软件在安装是需要指定前面安装程序的路径时常常提示找不到文件之类的错误,下面以mysql为例 1.安装开发环境 yum groupinstall "Development tools" 2.解决软件包依赖包 安装编译代码需要的包 yum -y install make gcc-c+

CentOS下编译安装gcc编译器教程

我们知道,关于 GCC 在 CentOS 下通过 yum 安装默认版本号,CentOS 5 是 4.1.2:CentOS 6 是 4.4.7:CentOS 7 是 4.8.3. 很多时候在编译安装软件都需要高版本的 GCC,否则就会报错. 那么如何升级 GCC 的版本呢? 首先要确认升级到的 GCC 版本号. 目前 GCC 的最新版已经到了 5.2,而 CentOS 7 则依然使用其 4.8,所以基于兼容性考虑,我选择升级到 4.8.5. GCC 官网:https://gcc.gnu.org 下

Vb.net2008做成的软件编译完才不到1M.运行支持软件却需要220M!!不可思议!做的安装软件,需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以了?

问题描述 Vb.net2008写的程序做成安装软件,在其他纯净的系统中就需要220M左右的软件支持,太庞大了,有没有更简单更小的软件支持就可以运行软件了?象.Net2005需要FrameWork2.0只有20多M,还能够接受!现在是越做越庞大了! 解决方案 解决方案二:buhuiba你从网上下载一个,netframwork就可以运行了啊解决方案三:vs.net2008会自动生成的.生成的文件在Debug文件下221M.编译设置上我只选择了包含Framework3.5.装完后看控制面板里有Fram

Linux系统常用的软件管理工具rpm、yum及软件源码编译安装

一.简介 在windows系统上我们安装软件的时候加上了一些与这些程序相关的信息,将他建立称为了数据库,就可以实现软件的安 装.卸载.升级与验证了,类似于windows的"添加删除程序".由于在linux系统上利用源码包设置编译参数.实际编译.最后还要根据需要的方式来安装程序,这个过程很是麻烦,而且对于不熟悉整个系统的用户来说,更是一种负担,所以后来在我们linux系统下至有两种常见的套件管理程序,分别是RPM和Debian的dpkg,其中RPM最为常见,那么晚我们 下面就来介绍下RP

Linux中服务器软件为什么需要编译安装_Linux

为什么服务器软件需要编译安装?一个流传很广的说法是编译安装性能更好,其实这是个谣言 服务器CPU事实已经被Intel垄断了,就那么几种型号,编来编去生成的机器码是一样的.Intel宣传自己的编译工具Intel C++ Compiler 比GCC编译出来性能要提升10%-20%,这就是一广告,生产环境很少用人用它,何况它还要收费 性能真不是问题,比如 strip 命令可以大大减小可执行文件的size,但是我装过几千遍软件,都没有见有人在安装脚本里面使用. 软件需要编译安装的真实理由有如下3点: 1

Linux下安装软件的一般步骤

目录 一.解析Linux应用软件安装包 二.了解包里的内容 三.搞定使用tar打包的应用软件 四.搞定使用rpm打包的应用软件 五.搞定使用deb打包的应用程序 一.解析Linux应用软件安装包(回目录) 通常Linux应用软件的安装包有三种: tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. rpm包,如software-1.2.3-1.i386.rpm.它是Redhat Linux提供的一种包封装格式. dpkg包,如software-