用通俗到业余水平的语言教你编译和打包

编译打包和其他
头像
carlos444_444
帖子: 448
注册时间: 2005-06-06 21:35
系统: Debian
来自: 四海为家
联系:

用通俗到业余水平的语言教你编译和打包

#1

帖子 carlos444_444 » 2008-09-21 20:26

  本文从零开始讲述编译的基本过程,希望菜鸟们能喜欢。毕竟Linux下的软件,源代码是多于二进制包的,学会了编译,再安装软件就不求别人了。所以,编译也是Linux菜鸟必修的一课。

1,安装编译工具。
$ sudo apt-get install dpkg-dev file gcc g++ libc6-dev make patch perl autoconf automake dh-make debhelper devscripts fakeroot gnupg g77 gpc xutils lintian pbuilder

2,安装傻瓜打包工具
(同时推荐另外的两个傻瓜编译+打包工具DebCreator/DebianPackageMaker,可以在www.getdeb.net获取)。
$ sudo apt-get install checkinstall。

3,下载源码,并解压缩到一个目录。
  进入源码目录,按照以下顺序,依次注意这些文件:autogen.sh,configure。一个软件包,一般都会有configure文件,它用来测试编译环境,以及生成makefile文件,再次是autogen.sh。autogen.sh的作用也是检测你的编译工具和依赖关系包是否完整;Makefile是编译的目标文件,也就是 make的时候要找的文件!
  好了,依次运行以下命令(当然,是在这些命令存在的前提下)测试其是否满足依赖关系,并生成一些相关的打包必要文件:
./autogen.sh
./configure

4,满足编译所需要的依赖关系。
  编译的时候,你需要安装一些特别的包,以满足需要。这里假设你已经安装好了所有的编译工具,且没有任何遗漏,那么,在autogen.sh和 configure出错的时候,提示说XX包没有安装,请安装。那么,你要安装的是XX-dev,而不是XX!比如,configure指出你的 pidgin包没有安装,可能你还纳闷,早上还用pidgin和老外聊天,现在它怎么说我没有安装呢?这么想就想到死胡同里去了,实际上它指的是 pidgin-dev包,开发包没有安装。这是Linux软件编译的约定俗成,所以无论是系统提示还是官方说明,都不会特别指出是dev包,所以贻害了好多Linux菜鸟,看到编译就敬而远之。本人最开始也被此种说法所误导,今天才得以悟道成仙。
  这个过程是整个编译过程中最复杂、最辛苦的一部分。基本上,绝大部分编译不成功的问题,都是因为依赖关系没有得到很好的解决而造成的。当安装了编译所依赖的所有dev包的时候,一切问题都将迎刃而解。

5,注意configure和autogen.sh的错误。
  每次运行./configure,中途出错停下,都会提示有XX包没有安装,我们就大胆地安装这个包的dev包,同时,切记版本要和configure 提示的匹配,不然也是绝对无法过关的。所以,这方面debian的apt-get占了绝对优势,提供的都是新包。多次运行./configure,直到它不再有出错提示,最后说几个Makefile都顺利建立。那么,你的编译依赖关系就完全解决了。
  如果遇到一些小软件,没有configure文件,也不要慌张,看看README,需要什么依赖关系,安装相关的-dev包就是了。而且你直接make,如果不成功,也会给出缺少包的提示,根据包名装-dev包。

当./configure出现以下信息的时候,说明所有的依赖关系满足,可以编译了:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating pixmaps/Makefile
config.status: creating src/Makefile
config.status: creating src/dieu.desktop
config.status: creating src/libdieu/Makefile
config.status: creating src/libdieu/gui/Makefile
config.status: creating src/libdieu/gui/about.py
config.status: creating src/libdieu/gui/add.py
config.status: creating src/libdieu/gui/browser.py
config.status: creating src/libdieu/gui/tray.py
config.status: creating src/libdieu/gui/prefs.py
config.status: creating config.h
carlos@bogon:~/build/dieu-0.5.5$ ls
结束的最后几行没有出现任何错误,且建立了Makefile

6,编译
  这次再make就绝对不会再出任何问题了。然后就是看着满屏幕的天书——英文字母、单词、各种符号不断变换着——这就是传说中的编译过程。你最好打开另一个tty玩会儿游戏。我的AMD Athlon 3800+双核、2GB内存,编译一个10MB的源码,大概要40分钟。make结束不出任何错误提示,就说明完全成功了。如果出现一个百分数,比如 97%,可能说明整个编译成功了97%,还有3%不成功。你可以选择重新编译,或者拿编译好的软件先碰碰运气,它现在已经在这个目录里可以使用了。

7,不要make install,要checkinstall。
  除非你想每次安装这个软件都编译一次,那么你就make install吧,没人拦着你。当然,像我们这些懒人,是不屑于每次编译的——说实话,一次都不想,有初次编译已经够恶心的了。所以,在安装的时候,建议使用checkinstall工具。
  输入sudo checkinstall,屏幕会给出一些软件包的相关细节,按数字1-9排列,如果你觉得软件名称或者版本需要修改,则输入相应的数字进行修改。不需要修改则输入回车。
  回车后,checkinstall要求你输入软件的说明。呵呵,这里要说明一下,第一行最好输入软件的全名,比如我这次编译的是webkit,就可以在第一行输入:WebKit Nightly Builds ver 36712。回车后,从第二行开始输入详细的describe。这样,当你安装好后,想用新立得自定义这个包的时候,就知道有什么好处了。赏心悦目的排版是每行不超过70个英文字母(含标点和空格)。
  再次回车,checkinstall将对你的软件全自动安装和全自动打包。当然,如果你只想打包,不想安装,则可以输入checkinstall(前面不加sudo),那么安装会失败,打包会成功。

8,额外的一些说明。
  (1)在编译好后,-dev包可以删除,但是尽量不要删除,因为这是编译工作的必备工具和法宝。是的,它占用了大量的空间,看着就难受(尤其是我个人,看着那么多-dev包,真是说不出的腻味呀),但是它同时给你带来的是创造的快乐,不是么?
  (2)你完全可以用DebCreator或者DebianPackageMaker出色地完成编译和打包工作,但是configure和满足编译的依赖关系的步骤,是他们无法替代你手工完成的。当然,他们的优点,可能是会使用更正宗、更原始的方法来打包,比如dh_make,而不是checkinstall。
  (3)由于本人使用Ubuntu,而且用得很业余,所以这里只提供一些debian相关的知识。如果大家有更高的需求,可以看看大侠Genokolar的这篇博文:http://genokolar.cn/blog/?p=210。俺当初找他学打包,就是看了这篇文章。不过最后还是给菜鸟推荐checkinstall的超级捷径。
  (4)本文只教菜鸟们如何急功近利地编译软件和打包,用的都是最通俗的语言和最简单的方法,如有不专业之处欢迎指正。

  昨天刚刚完成fcitx 3.6.2的编译,出现了一个新情况,就是configure通过了,但是make总是不成功。想了下,可能还是缺少某些包。于是检查每次make不成功,退出时结尾的一些单词——就是包名称了,然后按照那些包名称继续装-dev包,如果没有-dev包,就直接装非开发包。一般来说,只要把相关的包装全了,就会编译成功。不过,有些时候make出错后不提供包名字,也很让人恼火,呵呵。
上次由 carlos444_444 在 2009-11-14 10:39,总共编辑 6 次。
leohee
帖子: 30
注册时间: 2008-07-09 15:27

Re: 用通俗到业余水平的语言教你编译和打包

#2

帖子 leohee » 2008-09-21 23:45

:em01
顶一个。
楼主讲解的不错。学习
头像
luojie-dune
帖子: 22033
注册时间: 2007-07-30 18:28
系统: Linux
来自: 空气中

Re: 用通俗到业余水平的语言教你编译和打包

#3

帖子 luojie-dune » 2008-09-21 23:56

arch 很好,没有 -dev
『这个世界都是我的 ,我爱你们』

ENTP ⥂ INTP ⥄ INFP ⇦ INTJ

在此发布的文章使用 Creative Commons Attribution-ShareAlike 4.0 协议
头像
sagaiu2
帖子: 14
注册时间: 2007-05-26 5:07
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#4

帖子 sagaiu2 » 2008-09-22 9:44

:em02 :em02
果然是经典好贴。。
高啊。。实在是高。。。
头像
sagaiu2
帖子: 14
注册时间: 2007-05-26 5:07
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#5

帖子 sagaiu2 » 2008-09-22 10:01

:em05 :em05
再顶一回。。看了再顶。
头像
carlos444_444
帖子: 448
注册时间: 2005-06-06 21:35
系统: Debian
来自: 四海为家
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#6

帖子 carlos444_444 » 2008-09-22 11:01

楼上的。。。。让你来顶帖子,不是让你来冒傻气的。
囧!
飘飘星盒子
帖子: 104
注册时间: 2008-04-26 10:46

Re: 用通俗到业余水平的语言教你编译和打包

#7

帖子 飘飘星盒子 » 2008-09-26 22:43

mark~学习了
我相信且愿意成为您坑蒙拐骗吃喝嫖赌人生路上的好战友
BLOG地址>>http://sevenblog.tap.cn/
相关问题可以发Email:suyan7#gmail.com联系我
也欢迎大家关注我的围脖:http://weibo.com/1661300214
头像
ebok
帖子: 852
注册时间: 2008-02-15 0:09

Re: 用通俗到业余水平的语言教你编译和打包

#8

帖子 ebok » 2008-09-26 23:03

由这个联想到 Arch的 PKGBUILD
幸福感油然而生。 :em09
Somebody think they are full of niubility, so they play a zhuangbility, but only reflect their shability.
头像
754fz
帖子: 48
注册时间: 2007-11-27 15:42
来自: 汕头市
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#9

帖子 754fz » 2008-09-30 23:50

急功近利地编译软件和打包
太感谢了,学习了一点 :em11
玩S-Ubuntu
sdtzali
帖子: 76
注册时间: 2008-07-24 16:26

Re: 用通俗到业余水平的语言教你编译和打包

#10

帖子 sdtzali » 2008-10-04 15:45

好贴!!通俗易懂
头像
karron
帖子: 6226
注册时间: 2005-06-11 14:03
来自: 不明真相的群众
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#11

帖子 karron » 2008-10-04 15:51

luojie-dune 写了:arch 很好,没有 -dev
对于绝大部分用户来说是不需要安装-dev的包的, Arch这种不管三七二十一就一股脑统统给你安装上去, 非常不适合有洁癖的人使用. 只是包名字上没有-dev而已, 比较掩耳盗铃.
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.
头像
jarryson
帖子: 4002
注册时间: 2005-08-14 19:53

Re: 用通俗到业余水平的语言教你编译和打包

#12

帖子 jarryson » 2008-10-04 17:04

karron 写了:
luojie-dune 写了:arch 很好,没有 -dev
对于绝大部分用户来说是不需要安装-dev的包的, Arch这种不管三七二十一就一股脑统统给你安装上去, 非常不适合有洁癖的人使用. 只是包名字上没有-dev而已, 比较掩耳盗铃.
额,这也是你个人认为大多数用户用不到。除非你不需要编译软件。但是事实上arch用户非常喜欢自己打包。可以自己打补丁,或者针对自己的系统优化编译,如ff。

而且事实上-dev包非常小,都只有一些头文件。

貌似ubuntu也不过只是部分大包这样分开了把,这符合debian哲学,什么东西能分开就分开。典型例子:kde。arch里面就几个大包,但是kde官方也是这样打包的

arch打包是符合软件开发者的打包方式,包管理也简单很多很多。你自己给ubuntu打包会把头文件什么的分开么?

不过debian的dpkg确实很强大就是了。主要体现在一般不会出现**.so不存在这样的错误,archlinux就靠维护者更新。
zbdong
帖子: 40
注册时间: 2008-10-13 19:00

Re: 用通俗到业余水平的语言教你编译和打包

#13

帖子 zbdong » 2008-10-17 19:30

刚看了,但不是很明白
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: 用通俗到业余水平的语言教你编译和打包

#14

帖子 HuntXu » 2008-10-17 19:36

正规的deb打包方式:http://www.debian.org/doc/manuals/maint ... l#contents

幸福感油然而生,哈哈~ :em02
HUNT Unfortunately No Talent...
头像
nicety
帖子: 92
注册时间: 2008-07-14 15:06
来自: 天津
联系:

Re: 用通俗到业余水平的语言教你编译和打包

#15

帖子 nicety » 2008-10-30 18:42

通俗的东西都要仔细看看,很有用,
希奥开源成员 加入我们
手机设备请访问:http://wap.seo-dic.com.cn
我们的口号是:让开源深入民心

Simply Enjoying Open Source !
-共享是一种美德 --
回复