LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: EricNeon

gentoo月隐流剑宗第一章:GCC4——使命的召唤!

[复制链接]
发表于 2005-5-30 22:33:49 | 显示全部楼层
好文章!~ 赞一个先 !
回复 支持 反对

使用道具 举报

发表于 2005-5-30 23:04:08 | 显示全部楼层
爱其gfortran和编译速度
回复 支持 反对

使用道具 举报

发表于 2005-5-31 01:04:39 | 显示全部楼层
居然说c++还能走多远。c语言甚至没有提到。。
java的路还有很远呢。。。java程序目前的执行效率实在是无法忍受。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-31 08:58:13 | 显示全部楼层
是日正午时分,我双手合十。与其说是在求神,不如说是在求己。前方未知的世界也许危难重重,可以相信的只有手头的一张简单的文档和自己千锤百炼的安装技术。正如大学时一个我很崇拜的女侠所说的那样:这世上只要有使命在,就有从容上路的人;只要有死神,就有敢去赴约的!
如果失败了,我至少还有一个archlinux的安装盘,只要5分钟,我还会回到linux的世界中。于是我也从容上路了……

一门技术我不敢说会延续多久,汇编和C语言从我出生前就已经风靡世界了,今天它们仍然占据着操作系统最底层的领域,随着GCC4的出现,似乎也许还将往前走几十年。我无从得知未来,但是未来学中有个定律:世界总是会朝着你想得最多的一个方向发展。那么就姑且给予一段美好的希望吧。
时间永是流逝,我并不打算从stage1开始,因为要在mirror上找一个stage1很难。stage3也不能让我感觉舒服,但是我们也能够从stage3编译出一个全gcc4的环境,这适合所有的新手和那些已经安装了gentoo的人。我习惯从stage2开始我的旅程,恰恰在emerge system之时,似乎看上去很纯粹:)
安装的iso是从随便哪个速度较快的mirror中下载刻录的。我习惯从releases/x86/current/installcd下载刻录一个install-x86-minimal-2005.0.iso,不需要专门针对平台的那个universal的iso,当然如果你已经有一张,那么就从手头的那张开始也很不错。最好在安装前把需要的网络地址和相关步骤都记在一个小本子上,我们都不是天才,那么多的步骤和细节随时可能忘记。好记性不如烂笔头。
回复 支持 反对

使用道具 举报

发表于 2005-5-31 10:06:46 | 显示全部楼层
不知道从stage4开始会有什么不妥?抑或只备份一个world文件就可以较大限度地保留自己需要的包列表?不过可想而知,emerge -e world不知道要花几倍的时间。
很喜欢楼主这样随想方式的轻松风格。赞一个!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-1 11:43:20 | 显示全部楼层
其实无论是从哪个stage开始,最后都可以获得一个完整的GCC4编译的环境。而且只要注意其中细节就不会出现错误。我在过去一个月的时间内,对各个stage和各个GCC4的ebuild进行了许多次全新的编译,最后都可以得到同样的结果。
Gentoo的文档实在太丰富了,我经常混在 http://gentoo-wiki.com 里面。标准安装的手册打印出来有70多页,我就曾经打印过。但是现在基本上只需要一份快速安装手册即可。中文版在 http://www.gentoo.org.tw/doc/gentoo-x86-quickinstall.xml ,有条件的话就打印出来,应该就是4张A4的纸,实在没办法就算抄一份也可以。最主要的是其中挂载分区的顺序,和USE的使用。我们就悄悄的开始,放枪的不要!最新的gentoo周报中提到一篇很不错的安装手册,大家可以去看看: http://forums.gentoo.org/viewtopic-t-319349.html

我不想再把这些手册重新写一遍,只做些补充。
首先是要把硬盘加速,因为我们要从源码编译系统,硬盘的速度越快越好。早在gentoo1.4的时代,hdparm的用法就在安装手册中作为第一个步骤,但是很奇怪现在的手册没有再提这个。也许是生活条件好了,硬盘都SATA还是SCSI了?

  1. genstar ~ # hdparm /dev/hda
  2. /dev/hda:
  3. multcount    = 16 (on)
  4. IO_support   =  1 (32-bit)
  5. unmaskirq    =  1 (on)
  6. using_dma    =  1 (on)
  7. keepsettings =  0 (off)
  8. readonly     =  0 (off)
  9. readahead    = 256 (on)
  10. geometry     = 16383/255/63, sectors = 117210240, start = 0
复制代码

如果你的硬盘信息不是这样,也许你需要这么做

  1. # hdparm -a256A1c1d1m16u1 /dev/hda
复制代码

来检查一下硬盘的性能

  1. # hdparm -tT /dev/hda
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-6-3 17:02:33 | 显示全部楼层
哈哈
写得真好
还有呢
在等着看你的文章

回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-3 20:55:31 | 显示全部楼层
为了真实得再现gcc4的过程,我把我的系统从新安装了。今天发现已经有gcc4.1.0-beta20050528这个ebuild。
我想问一下,如果我在CFLAGS中设置 -O9 甚至-O30,编译出来的系统是否会更强劲?

今天下午第一次冲击gcc4.1.0的这个环境失败,正在回到gcc4.0.1-beta20050602这里,准备重新开始。
回复 支持 反对

使用道具 举报

发表于 2005-6-3 22:46:37 | 显示全部楼层
这是 eyou.com 的开发者 qyb 写的 gcc 传奇,记述了 gcc 历史上的一段往事。

顺便说一句,eyou.com 的邮件服务完全遵循 W3C 标准,开发者自己即使用 Firefox,所以大家多支持吧。

原文地址 http://dev.eyou.com/?q=node/204
英文原文 http://www.softpanorama.org/People/Stallman/programmer.shtml#GCC

gcc saga

可以从这里看到一个基本完整的事件描述,偶就自己得到的资料简单概括一下:

1997年,以 Cygnus(第一个开源商业公司,后来被 RedHat 收购)为首的开发团队决定独立开发 egcs,因为 RMS 认为 gcc 最重要的是稳定,然而 Cygnus 迫切需要扩展 gcc 到更多平台上(它的商业产品 GNUPro 和 eCos 就是面向嵌入式市场的)。分歧不可避免,尤其是 Cygnus 的三位创始人从 1990 年开始就成为 gcc/g++/binutils/gdb 的重要开发人员(可以参考洪峰翻译的那本开源软件文集),这次分裂对 gcc 带来的挫伤是非常严重的。

在 egcs 发布前夕,gcc 迫于压力,发布了 2.8.1,事情发展到这一步已经有政治斗争的意味。egcs 毫不示弱,如果运行 egcs --version,它的版本号显示是 1.x,但如果运行 egcs 符号链接到的 gcc --version,版本号显示为 2.91.x。尽管 Linus 一直在推荐使用 gcc 2.7.2.3 编译他的 linux kernel(稳定性的确是最重要的),可事情最终还是向着有利于 egcs 的方向发展,尤其是 RedHat 收购 Cygnus 后,egcs 就成为这个最流行的 Linux 发行版本的缺省编译器。那个时候,Eric Raymond 发起 Open Source 运动,VA 和 RedHat 相继上市,RMS 和 FSF 的确有衰落的迹象,egcs 取得最后胜利眼看指日可待。

事情的结果现在我们也都知道了:gcc 2.8 无疾而终,RMS 交出 gcc 的管理权,gcc 从 GNU C Compiler 改名为 GNU Compiler Collection,egcs 改名 gcc 2.95。

偏房最终扶正,但 RedHat 的冒险仍在继续,当 RedHat 7.0 里面再一次出现 gcc 的时候,版本变成了 2.96。RedHat 为了跨平台更强的 gcc 3.0 而不惜拿忠实用户做 beta test,Linux kernel、Apache、MySQL...纷纷建议使用 2.95.3 编译它们。亿邮也跟风使用 2.95.3 编译自己的软件,呵呵。我可能也正是因为这个原因而喜欢上的 debian,2000 年的 potato 给我的 gcc 是 2.95.2,2002 年的 woody 则是 2.95.4!!从此我就坚信 debian 是比 redhat 更可靠的发行版本。

虽然 saga 读起来很有些激动人心,但说实在的,类似 gcc 这样的传奇还是越少越好。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 10:42:22 | 显示全部楼层
人在gentoo漂,哪有不挨刀?经过了几番思想、技术上的斗争,终于确定了一个合理使用/etc/make.conf和/etc/portage来控制编译的方向。
我的/etc/make.conf原本如下:

  1. # These settings were set by the catalyst build script that automatically built this stage
  2. # Please consult /etc/make.conf.example for a more detailed example
  3. CFLAGS="-O2 -march=athlon-xp -fomit-frame-pointer"
  4. CHOST="i686-pc-linux-gnu"
  5. CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
  6. LDFLAGS="-Wl,-O1"
  7. ACCEPT_KEYWORDS="~x86"
  8. SYNC="rsync://rsync2.au.gentoo.org/gentoo-portage"
  9. GENTOO_MIRRORS="http://mirror.gentoo.gr.jp http://gentoo.gg3.net http://gentoo.mirrors.pair.com/"
  10. #FETCHCOMMAND='/usr/bin/proz --no-getch -s ${URI} -P ${DISTDIR}'
  11. PORTDIR_OVERLAY="/usr/portage /dump/got "
  12. USE="java nptl -ia64 -ppc -mips cairo readline -fortran -doc multitarget multislot -ipv6 splash pcmcia via unicode utf-8 opengl python2.4 xml2 sed gstreamer mad stoke zh_CN nptlonly hal dbus cjk -qt -kde splash gtk2 acc alsa fbcon directfb dvd apm bitmap-fonts cups gtk2 avi readline 3dnow 3dnowext mmxext mp mmx sse mtrr"
  13. AUTOCLEAN="yes"
  14. FEATURES="buildpkg autoaddcvs autoconfig ccache cvs strict sfperms"
  15. #PORTAGE_BINHOST=""
  16. LANGUAGE="zh_CN.UTF-8:zh_CN:zh_CN.GBK:en_US:en_US.UTF-8"
  17. LANG="zh_CN.UTF-8"
  18. VIDEO_CARDS="via"
  19. CLEAN_DELAY=3
  20. EMERGE_WARNING_DELAY=5
复制代码

有这么几点是需要注意的:
首先是CFLAGS="-O2 -march=athlon-xp -fomit-frame-pointer",注意这其中的“-march=myarch”,在gcc3.x时,这里默认是“-mcpu=myarch”。当你要把系统升级到gcc4时,这里“mcpu”必须改成“march”。实际上,在gcc3.4.x系列中,“march”也可以顺利编译,所以从现在起,你就可以把它修正过来了。

其次,CFLAGS中编译级别“-O2”,注意前面是大写字母O,不是数字0。这个级别2代表了编译的深度,理论上讲,这个级别数字越大,编译出来的性能也越好,但是编译所需要的时间也越长。我就曾听说有些国外gentoo高手的级别有设置成9的,顶礼摹拜一下。但是在gcc4的编译中,目前这个级别只有在2时可以顺利编译大多数的程序。所以你也不要和我一样去疯狂追求高性能。等gcc4.1稳定以后,相信有更多的机会让我们进一步提高性能。

再者,注意LDFLAGS=“-Wl,-O1”,这个参数告诉连接器,把Binutils软件包中所有的程序都使用“-W1,-O1”连接。然而,严格地说,首先是“-W1,-O1” 被传递给libtool,libtool再把“-W1,-O1”传递给连接器。这样做可以使编译出来的程序运行效率更高。这种做法在gcc4.0.0的beta ebuilds编译时可以很好的使用,但是从最新的4.0.1beta和4.1.0beta的ebuild开始。如果你从一开始就打开了这个设置,那么在编译时就会报错中断。所以在第一次编译gcc4.0.1后续版本时,请先把这个设置关闭,等gcc4编译完成后,再打开这个设置。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表