编译软件
Ubuntu 存储库拥有数千个软件,如果添加第三方存储库,您可以获得更多! 但在某些情况下,您可能需要从源代码编译并安装软件(相关说明请移至CompilingEasyHowTo):
1、仓库中的软件包不可用;
2、仓库中的软件包太旧;
3、对于仓库中的软件包,由于个人原因导致程序部分功能无法使用;
4、仓库中的软件包可能存在一些已经被业主修补过的Bug;
5.您想通过测试帮助作者修复个别bug;
6.或者只是想从头开始ubuntu源码编译工具,尝试自动编译一个程序;
环境
您需要根据编写相关程序的语言来编译软件。 需要编译的应用程序通常是用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运行时和编译器。 您可以按照java页面上的说明安装java。 有时你需要一个基于java的构建工具ant,可以从ubuntu存储库获取该包:
sudo apt-get install gcj
如果程序是用解释型语言编写的,比如python、perl,那么只需要一个解析器,ubuntu中默认安装了这个解析器,就可以直接运行程序了。 大多数情况下,你可以直接从ubuntu仓库安装这些程序运行所必需的python和perl程序。 有关解释语言的更多信息,请参阅文末!
你真的需要编译它吗?
如果您编译软件只是因为软件存储库中没有该软件,那么请在 UbuntuPackageSearch 中搜索该软件包! 许多作者还制作自己的 PPA,这些 PPA 也可以添加到您的存储库中。 许多作者制作 PPA 源的地方是 Launchpad。 您还可以使用下面的命令通过命令行搜索相关软件的关键字(实际上,请使用实际术语而不是关键字)!
apt-cache search
获取来源
通常,源码包会在作者自己的网站上以某种方式提供! 常见格式为 tar.gz 和 tar.gz2 或 zip。 您可以使用文件解压工具通过以下命令来解压它们:
tar -xvf file.tar.gz tar -xvf file.tar.bz2 unzip file.zip
有时,你还需要使用CVS来切割边缘代码,可以通过sudoapt-getinstallcvs安装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 (sudoapt-getinstallbzr) 从上游获取当前代码,而无需自动查找版本控制位置。 例如:
bzr get lp:network-manager
三步编译
Linux上大部分需要源码安装的程序都可以通过./configure这三个步骤来安装; 制作; makeinstall,而最困难的步骤往往是在./configure步骤,所以前面几个步骤可以很轻松的完成。
配置
configure 是一个执行以下操作的脚本:
1. 用于检测计算机构建包所需的完整性;
2.帮助您根据需要更改默认路径;
3.用于激活/禁用编译器中的各种选项;
4.用于更改程序安装路径;
您可以通过执行以下命令来查看特定配置脚本提供的选项和功能:
./configure --help | less
例如,默认配置脚本将指定安装在/usr/local 下。 如果要更改路径,可以执行如下所示的配置脚本命令:
./configure --PREFIX=/opt
如果你确实想从头开始编译,可以仔细阅读README或INSTALL文件。 您将看到需要哪些软件,它们在这些文件中的名称通常与在软件包系统中的名称不同。 然后,就可以使用apt-cache工具来查找对应的包了。 如果你已经通过仓库编译了包,还有一个技巧,就是使用以下命令安装包的依赖项:
sudo apt-get build-dep
这可以确保此后可以安装所有必需的包,这样configure就不会报告过时依赖项的错误,否则您将不得不继续编译依赖项。
查找并修复配置错误
仅在以下情况下,配置可能会失败:
1、编译时需要-dev包;
2. 编译GNOME应用程序需要相应的gnome级别; 编译 KDE 应用程序时,需要 kde-level;
3、C和C++库的名字总是以lib开头,所以如果./configure报错说缺少库foo,那么就需要安装libfoo-dev包;
4. 如果configure显示“Xincludes”,那么您可能需要安装以下软件包“xlibs-dev、xlibs-static-dev、x-window-system-dev”。 请注意,有时只有 xorg-dev 和 x-dev 可以。 -Racecar56UnderJaunty 需要安装 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和以前一样ubuntu源码编译工具,如果把auto-apt替换成auto-apt!
6、如果编译软件禁用了失败的选项,可以使用./configure-disable-FEATURE选项。
7.如果您自己无法解决遇到的问题,您也可以向ubuntu寻求官方帮助。
如果根本没有configure文件,最好检查一下configure.ac文件(需要仔细阅读INSTALL和README文件)。 如果configure.ac文件存在,则意味着开发人员忘记创建最终的配置文件。 可以创建,但是需要autoconf包:
sudo apt-get install autoconf
安装成功后,输入:
autoconf
运气好的话,应该会创建一个工作配置文件。
编译
幸运的是,配置步骤已经完成,可以开始实际的编译和安装了。 很简单的:
make
现在,如果一切顺利,您的源目录中应该有该程序的工作副本,您可以通过运行以下命令来尝试:
src/program_name
如果程序的这一步失败,则可能是程序中的错误。 这时候你最好联系作者,告诉他程序的问题。
安装包
如果一切顺利,您可以通过键入以下命令来安装该程序:
sudo checkinstall
使用 CheckInstall 创建一个 .deb 包,以后可以轻松删除!
但是,如果由于某种原因您不想使用 CheckInstall,这是安装的最后手段(不推荐):
sudo make install
注意:
1. 如果程序是内核的组件,还需要 gcc-3.4 (onbreezy) 和 kernel-headers,稍后可以使用 sudoapt-getinstallgcc-3.4linux-headers-$(uname-r) 安装它们。 请注意,每次内核升级后,此类内核组件也必须重新编译,并且还必须重新下载新的标头。 要编译完整的内核,请参阅 KernelCompile。
2.如果要重新编译现有的debian软件包,可以使用dpkg-buildpackage-rfakeroot。 如果缺少某些包,构建脚本会告诉您包的名称!
3、如果是从revisioncontrol(CVS、Bazaar等)编译,一般需要获取revisioncontrol的源代码,然后减少一步运行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,因此pythonmysql的建立称为python-mysqldb。 这里的映射很少是一致的,apt-cache 可以提供帮助! 进行如下搜索:
apt-cache search python | grep mysql
一般来说,需要的帮助文档都在需要安装的组件之中!
3. ruby组件的命名有点类似于perl,因为activesupport是libactivesupport-ruby[1.8|1.9](如果没有特殊要求,默认是1.8)。 其实你也可以安装rubygems这个ruby包管理平台,但是debian/ubuntu关闭了一些升级功能,以保证rubygems可以使用apt正常工作。 如果你想让 ruby 保持最新,请看看 RubyOnRails。
apt-cache search ruby | grep activesupport