当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 65 篇帖子 ]  前往页数 1, 2, 3, 4, 5  下一页
作者 内容
1 楼 
 文章标题 : 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-21 20:26 
头像

注册: 2005-06-06 21:35
帖子: 441
地址: 双子星
系统: Debian
送出感谢: 2
接收感谢: 2
  本文从零开始讲述编译的基本过程,希望菜鸟们能喜欢。毕竟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出错后不提供包名字,也很让人恼火,呵呵。


_________________
简单的Linux标准编译和打包


最后由 carlos444_444 编辑于 2009-11-14 10:39,总共编辑了 6 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-21 23:45 

注册: 2008-07-09 15:27
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
:em01
顶一个。
楼主讲解的不错。学习


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-21 23:56 
头像

注册: 2007-07-30 18:28
帖子: 22033
地址: 空气中
系统: Linux
送出感谢: 17
接收感谢: 68
arch 很好,没有 -dev


_________________
『这个世界都是我的 ,我爱你们』

ENTP ⥂ INTP ⥄ INFP ⇦ INTJ

在此发布的文章使用 Creative Commons Attribution-ShareAlike 4.0 协议


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-22 9:44 
头像

注册: 2007-05-26 5:07
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
:em02 :em02
果然是经典好贴。。
高啊。。实在是高。。。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-22 10:01 
头像

注册: 2007-05-26 5:07
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
:em05 :em05
再顶一回。。看了再顶。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-22 11:01 
头像

注册: 2005-06-06 21:35
帖子: 441
地址: 双子星
系统: Debian
送出感谢: 2
接收感谢: 2
楼上的。。。。让你来顶帖子,不是让你来冒傻气的。
囧!


_________________
简单的Linux标准编译和打包


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-26 22:43 

注册: 2008-04-26 10:46
帖子: 104
送出感谢: 0 次
接收感谢: 0 次
mark~学习了


_________________
我相信且愿意成为您坑蒙拐骗吃喝嫖赌人生路上的好战友
BLOG地址>>http://sevenblog.tap.cn/
相关问题可以发Email:suyan7#gmail.com联系我
也欢迎大家关注我的围脖:http://weibo.com/1661300214


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-26 23:03 
头像

注册: 2008-02-15 0:09
帖子: 852
送出感谢: 0 次
接收感谢: 0 次
由这个联想到 Arch的 PKGBUILD
幸福感油然而生。 :em09


_________________
Somebody think they are full of niubility, so they play a zhuangbility, but only reflect their shability.


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-09-30 23:50 
头像

注册: 2007-11-27 15:42
帖子: 48
地址: 汕头市
送出感谢: 0 次
接收感谢: 0 次
引用:
急功近利地编译软件和打包

太感谢了,学习了一点 :em11


_________________
玩S-Ubuntu


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-04 15:45 

注册: 2008-07-24 16:26
帖子: 76
送出感谢: 0 次
接收感谢: 0 次
好贴!!通俗易懂


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-04 15:51 
头像

注册: 2005-06-11 14:03
帖子: 6226
地址: 不明真相的群众
送出感谢: 0 次
接收感谢: 0 次
luojie-dune 写道:
arch 很好,没有 -dev


对于绝大部分用户来说是不需要安装-dev的包的, Arch这种不管三七二十一就一股脑统统给你安装上去, 非常不适合有洁癖的人使用. 只是包名字上没有-dev而已, 比较掩耳盗铃.


_________________
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-04 17:04 
头像

注册: 2005-08-14 19:53
帖子: 3998
送出感谢: 1
接收感谢: 2
karron 写道:
luojie-dune 写道:
arch 很好,没有 -dev


对于绝大部分用户来说是不需要安装-dev的包的, Arch这种不管三七二十一就一股脑统统给你安装上去, 非常不适合有洁癖的人使用. 只是包名字上没有-dev而已, 比较掩耳盗铃.


额,这也是你个人认为大多数用户用不到。除非你不需要编译软件。但是事实上arch用户非常喜欢自己打包。可以自己打补丁,或者针对自己的系统优化编译,如ff。

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

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

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

不过debian的dpkg确实很强大就是了。主要体现在一般不会出现**.so不存在这样的错误,archlinux就靠维护者更新。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-17 19:30 

注册: 2008-10-13 19:00
帖子: 40
送出感谢: 0 次
接收感谢: 0 次
刚看了,但不是很明白


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-17 19:36 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
正规的deb打包方式:http://www.debian.org/doc/manuals/maint-guide/index.zh-cn.html#contents

幸福感油然而生,哈哈~ :em02


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 用通俗到业余水平的语言教你编译和打包
帖子发表于 : 2008-10-30 18:42 
头像

注册: 2008-07-14 15:06
帖子: 92
地址: 天津
送出感谢: 0 次
接收感谢: 0 次
通俗的东西都要仔细看看,很有用,


_________________
希奥开源成员 加入我们
手机设备请访问:http://wap.seo-dic.com.cn
我们的口号是:让开源深入民心

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


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 65 篇帖子 ]  前往页数 1, 2, 3, 4, 5  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译