特殊:Badtitle/NS100:CompilingSoftware/zh:修订间差异
Dbzhang800(留言 | 贡献) 小 →一些建议 |
Allen05ren(留言 | 贡献) |
||
(未显示同一用户的2个中间版本) | |||
第21行: | 第21行: | ||
=== 你真的需要编译程序吗? === | === 你真的需要编译程序吗? === | ||
如果你因为源里面没有想要的包而打算编译程序,请在这里[http://packages.ubuntu.com/ Ubuntu Package Search]搜索,也可以从http://ubuntulinux.nl/source-o- | 如果你因为源里面没有想要的包而打算编译程序,请在这里[http://packages.ubuntu.com/ Ubuntu Package Search]搜索,也可以从http://ubuntulinux.nl/source-o-matic 上的列表查看第三方的源。你也可以通过以下的命令来搜索可用的包: | ||
<code><nowiki>apt-cache search <a keyword from the package></nowiki></code> | <code><nowiki>apt-cache search <a keyword from the package></nowiki></code> |
2009年2月8日 (日) 21:17的最新版本
文章出处: |
{{#if: | {{{2}}} | https://help.ubuntu.com/community/CompilingSoftware }} |
点击翻译: |
English {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/af | • {{#if: UbuntuHelp:CompilingSoftware|Afrikaans| [[::CompilingSoftware/zh/af|Afrikaans]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ar | • {{#if: UbuntuHelp:CompilingSoftware|العربية| [[::CompilingSoftware/zh/ar|العربية]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/az | • {{#if: UbuntuHelp:CompilingSoftware|azərbaycanca| [[::CompilingSoftware/zh/az|azərbaycanca]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/bcc | • {{#if: UbuntuHelp:CompilingSoftware|جهلسری بلوچی| [[::CompilingSoftware/zh/bcc|جهلسری بلوچی]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/bg | • {{#if: UbuntuHelp:CompilingSoftware|български| [[::CompilingSoftware/zh/bg|български]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/br | • {{#if: UbuntuHelp:CompilingSoftware|brezhoneg| [[::CompilingSoftware/zh/br|brezhoneg]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ca | • {{#if: UbuntuHelp:CompilingSoftware|català| [[::CompilingSoftware/zh/ca|català]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/cs | • {{#if: UbuntuHelp:CompilingSoftware|čeština| [[::CompilingSoftware/zh/cs|čeština]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/de | • {{#if: UbuntuHelp:CompilingSoftware|Deutsch| [[::CompilingSoftware/zh/de|Deutsch]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/el | • {{#if: UbuntuHelp:CompilingSoftware|Ελληνικά| [[::CompilingSoftware/zh/el|Ελληνικά]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/es | • {{#if: UbuntuHelp:CompilingSoftware|español| [[::CompilingSoftware/zh/es|español]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/fa | • {{#if: UbuntuHelp:CompilingSoftware|فارسی| [[::CompilingSoftware/zh/fa|فارسی]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/fi | • {{#if: UbuntuHelp:CompilingSoftware|suomi| [[::CompilingSoftware/zh/fi|suomi]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/fr | • {{#if: UbuntuHelp:CompilingSoftware|français| [[::CompilingSoftware/zh/fr|français]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/gu | • {{#if: UbuntuHelp:CompilingSoftware|ગુજરાતી| [[::CompilingSoftware/zh/gu|ગુજરાતી]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/he | • {{#if: UbuntuHelp:CompilingSoftware|עברית| [[::CompilingSoftware/zh/he|עברית]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/hu | • {{#if: UbuntuHelp:CompilingSoftware|magyar| [[::CompilingSoftware/zh/hu|magyar]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/id | • {{#if: UbuntuHelp:CompilingSoftware|Bahasa Indonesia| [[::CompilingSoftware/zh/id|Bahasa Indonesia]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/it | • {{#if: UbuntuHelp:CompilingSoftware|italiano| [[::CompilingSoftware/zh/it|italiano]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ja | • {{#if: UbuntuHelp:CompilingSoftware|日本語| [[::CompilingSoftware/zh/ja|日本語]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ko | • {{#if: UbuntuHelp:CompilingSoftware|한국어| [[::CompilingSoftware/zh/ko|한국어]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ksh | • {{#if: UbuntuHelp:CompilingSoftware|Ripoarisch| [[::CompilingSoftware/zh/ksh|Ripoarisch]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/mr | • {{#if: UbuntuHelp:CompilingSoftware|मराठी| [[::CompilingSoftware/zh/mr|मराठी]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ms | • {{#if: UbuntuHelp:CompilingSoftware|Bahasa Melayu| [[::CompilingSoftware/zh/ms|Bahasa Melayu]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/nl | • {{#if: UbuntuHelp:CompilingSoftware|Nederlands| [[::CompilingSoftware/zh/nl|Nederlands]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/no | • {{#if: UbuntuHelp:CompilingSoftware|norsk| [[::CompilingSoftware/zh/no|norsk]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/oc | • {{#if: UbuntuHelp:CompilingSoftware|occitan| [[::CompilingSoftware/zh/oc|occitan]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/pl | • {{#if: UbuntuHelp:CompilingSoftware|polski| [[::CompilingSoftware/zh/pl|polski]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/pt | • {{#if: UbuntuHelp:CompilingSoftware|português| [[::CompilingSoftware/zh/pt|português]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ro | • {{#if: UbuntuHelp:CompilingSoftware|română| [[::CompilingSoftware/zh/ro|română]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/ru | • {{#if: UbuntuHelp:CompilingSoftware|русский| [[::CompilingSoftware/zh/ru|русский]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/si | • {{#if: UbuntuHelp:CompilingSoftware|සිංහල| [[::CompilingSoftware/zh/si|සිංහල]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/sq | • {{#if: UbuntuHelp:CompilingSoftware|shqip| [[::CompilingSoftware/zh/sq|shqip]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/sr | • {{#if: UbuntuHelp:CompilingSoftware|српски / srpski| [[::CompilingSoftware/zh/sr|српски / srpski]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/sv | • {{#if: UbuntuHelp:CompilingSoftware|svenska| [[::CompilingSoftware/zh/sv|svenska]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/th | • {{#if: UbuntuHelp:CompilingSoftware|ไทย| [[::CompilingSoftware/zh/th|ไทย]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/tr | • {{#if: UbuntuHelp:CompilingSoftware|Türkçe| [[::CompilingSoftware/zh/tr|Türkçe]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/vi | • {{#if: UbuntuHelp:CompilingSoftware|Tiếng Việt| [[::CompilingSoftware/zh/vi|Tiếng Việt]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/yue | • {{#if: UbuntuHelp:CompilingSoftware|粵語| [[::CompilingSoftware/zh/yue|粵語]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/zh | • {{#if: UbuntuHelp:CompilingSoftware|中文| [[::CompilingSoftware/zh/zh|中文]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/zh-hans | • {{#if: UbuntuHelp:CompilingSoftware|中文(简体)| [[::CompilingSoftware/zh/zh-hans|中文(简体)]]}}|}} {{#ifexist: {{#if: UbuntuHelp:CompilingSoftware | UbuntuHelp:CompilingSoftware | {{#if: | :}}CompilingSoftware/zh}}/zh-hant | • {{#if: UbuntuHelp:CompilingSoftware|中文(繁體)| [[::CompilingSoftware/zh/zh-hant|中文(繁體)]]}}|}} |
{{#ifeq:UbuntuHelp:CompilingSoftware|:CompilingSoftware/zh|请不要直接编辑翻译本页,本页将定期与来源同步。}} |
{{#ifexist: :CompilingSoftware/zh/zh | | {{#ifexist: CompilingSoftware/zh/zh | | {{#ifeq: {{#titleparts:CompilingSoftware/zh|1|-1|}} | zh | | }} }} }} {{#ifeq: {{#titleparts:CompilingSoftware/zh|1|-1|}} | zh | | }}
Ubuntu的官方源有大量的包供你选择,你甚至可以从第三方的源获得更多的包。不过,有些时候,在以下的情况下,你可能需要把源代码编译成包。
- 在源里没有这个包。
- 源里的包的版本很老了。
- 因为某些原因,源里的包屏蔽了程序中的某种特性。
- 源里的包可能有bug,不过已经被编写这个包的作者修复了。
- 你想检验一个补丁来帮助开发者修复错误。
- 你想尝试亲手从零开始编译程序。
背景介绍
你可能需要去编译某种语言编写的程序。需要编译的程序一般是用C或者C++编写的。在这种情况下,你需要安装gcc编译器,这个编译器可以通过安装build-essential这个包来获得。一般,你可以在终端里输入以下的命令来安装:
sudo apt-get install build-essential
如果程序是用Java编写的,你需要Java运行库和编译器来编译。你可以按照这里[wiki.ubuntu.com/RestrictedFormats Java]的说明来安装java。有时候,也需要一个基于java的编译工具ant,这个包可以从Ubuntu的源里安装。
如果程序使用像python或者perl这种解释性语言来编写的,你只需要解析器就可以了,这个在Ubuntu中是缺省安装的。你可以直接运行这种程序,在多数情况下,你从Ubuntu源安装和运行程序的时候,需要安装额外的python或者perl程序。
你真的需要编译程序吗?
如果你因为源里面没有想要的包而打算编译程序,请在这里Ubuntu Package Search搜索,也可以从http://ubuntulinux.nl/source-o-matic 上的列表查看第三方的源。你也可以通过以下的命令来搜索可用的包:
apt-cache search <a keyword from the package>
获得源程序
总的来说,可以在作者的网站上下载压缩格式的源程序。一般的压缩格式有tar.gz、.bz2和zip。你可以通过以下的命令来解压:
tar -zvxf file.tar.gz tar -jxvf file.bz2 unzip file.zip
有时候,你也需要使用CVS来获得高级代码。执行sudo apt-get install cvs
来安装cvs程序。举个例子,要重新获取NetworkManager的源代码,执行以下的命令:
cvs -d :pserver:[email protected]:/cvs/gnome login cvs -d :pserver:[email protected]:/cvs/gnome co NetworkManager
如果你通过cvs来安装,请注意这篇文章的结尾部分。
编译程序的三个步骤
大部分需要从源代码编译安装在Linux中的程序,可以通过./configure;make;make install这三个步骤来进行。最困难的步骤在于./configure这一步,之後的步骤就简单了。
configure
configure
这个脚本会进行以下的工作:
- 检查计算机中否有满足编译这个包所需的依赖
- 可以修改查找这些依赖的缺省路径
- 可以激活或屏蔽被编译程序的各种选项
- 可以修改程序安装的路径
你可以执行以下的命令来查看configure脚本提供的各种参数选项:
./configure --help | less
例如,configure脚本缺省的安装路径是/usr/local。如果你需要改变这个路径,按照下面来执行configure这个脚本:
./configure --PREFIX=/opt
如果你真的从零开始编译程序,一定要阅读README和INSTALL文件。你会看到程序所需的依赖,通常是一些库,不过在不同的系统中它们的名字也是不同的。可以通过apt-cache工具来查找这些依赖的包,另一个更好的方法是,如果你编译的程序是源里就有的话,可以执行以下的命令来安装编译所需的依赖包:
sudo apt-get build-dep <package>
这个会保证这个包所需的依赖包全部被安装,如果你系统中安装有旧版本的依赖包,configure脚本就不会进行编译,在这种情况下,你就不得不也编译这些依赖包了。
configure常见问题的决方法
尽管完成上面所说的步骤,但是configure也有可能失败。
- 编译就必须安装
-dev
这个包。 - 编译GNOME的程序,需要
gnome-devel
这个包;对于KDE程序,需要kde-devel
这个包。 - C和C++的库的名称都是以lib开头的,所以如果./configure提示缺少foo库,需要安装libfoo-dev这个包。
- 如果编译脚本提示需要"X includes",可能需要安装这些包:xlibs-dev、xlibs-static-dev、x-window-system-dev
- 还有其他的方法来判定需要那些依赖包,可以通过使用auto-apt工具或者apt-file工具(auto-apt会快一点)。
sudo apt-get install auto-apt sudo auto-apt update auto-apt search missing-file.h
使用apt-file也是和上面一样,只要把"auto-apt"替换成"apt-file"即可。
- 因为特性而编译失败,可以通过./configure --disable-FEATURE来屏蔽特性。
- 如果你自己不能解决问题,可以在#ubuntu这里寻求帮助。
如果不存在configure文件,你就要检查一下configure.ac是否存在(不过第一步,还是应该仔细阅读一下INSTALL和README文件)。如果configure.ac文件存在,那就是开发者忘记了生成最终的 configure文件。你自己可以通过autoconf这个包来生成configure文件:
sudo apt-get install autoconf
安装了以後,你可以输入:
autoconf
然後,如果运气好的话,就会生成configure文件。
编译包
一切顺利的话,configure这个步骤就结束了,接下来,才是正式开始编译。这个只需这样做:
make
一切正常的话,在源代码存放的文件夹下面就会有能够运行的程序了。你可以尝试运行一下:
src/program_name
如果这一步程序失败了,那很可能程序有bug,你应该联系开发者,让他留意这个问题。
安装包
如果一切顺利,你可以输入以下命令来安装程序:
sudo make install
不过,更好的方法是使用CheckInstall来生成一个.deb文件,这会使以後能够方便地卸载这个包。
注意
- 如果是内核程序,你需要gcc-3.4(在breezy上)和kernel-headers包,输入
sudo apt-get install gcc-3.4 linux-headers-$(uname -r)
来安装。要注意,每次内核更新了,内核程序都必须重新编译(而且也要下载新的header)。关于如何编译一个完整的内核,参考KernelCompileHowto。 - 如果你想重新编译已经存在的debain包,输入
dpkg-buildpackage -rfakeroot
,而且如果某个包丢失了,编译脚本会提示这个包的名称。 - 如果你从cvs中编译,一般需要从cvs中获取源代码,并且运行autogen.sh来生成configure脚本。
解释性语言
如果没有安装相应的模块,解析性语言编写的程序会运行失败。
- Perl模块一般是像foo::bar这样引用的(例如xml::parse),不过这个包的名称叫做libfoo-bar-perl(libxml-parser-perl),如果名称有些不同,可以利用apt-cache来搜索,例如:
apt-cache search foo | grep bar apt-cache search xml | grep parser
- Python的模块叫做python-module,所以python的mysql模块就叫做python-mysqldb,这种对应比较一致,所以apt-cache能够发挥很好的作用。像这样来搜索:
apt-cache search python | grep mysql
可以帮助你获得所需的python模块。
一些建议
对于新手来说,参考CompilingEasyHowTo会更加容易明白。
而且,你会发现CheckInstall很有用。