|
|
近日在Sir里的Gentoo版及LFS版内,那些热爱编译的大伙们有个热门话题就是gcc-4.1何时会release了。
其实,到今天为止,在官方网页http://gcc.gnu.org/ 上看见gcc-4.1只是开添了release branch,尚未正式推出,没有release date也不能下载到gcc-4.1的release版,能下的就只有snapshot或svn版罢了
那麽何解大伙们这麽关心呢?原因是过去每一个新版gcc都会在runtime性能上(指编译好的程式在运行时)都会为用家们带来惊喜,在Gentoo版曾经有高人说"gcc4.1比4.0性能提高15%绝对不是空话"。试想,gcc-3.4编出来的东西比gcc-3.3快约15%,gcc-4.0编出来的东西比gcc-3.4快约5-10%,若gcc-4.1真的比gcc-4.0能再快15%的话,那麽从gcc-3.3升级到gcc-4.1将会是个大跃进啊!
在好奇心驱使下,下载了gcc-4.1-20051112的snapshot来体验一番。Debian3.1默认的gcc版本是gcc-3.3,正好拿来感受3.3到4.1之间的差距。由於gcc-4.1尚未正式推出,还是自己动手编译吧:
1. 白老鼠是Debian3.1,先将tarball解压到/tmp,这个tarball下回来的时候有34MB,是包括了所有的compiler的
tar jxf gcc-4.1-20051112.tar.bz2 -C /tmp
2. 准备编译,LFS手册说明gcc的developers推荐在独立的目录内进行编译工作,因此叁考LFS或BLFS手册的方法
cd /tmp
mkdir gcc-build
cd gcc-build
../configure --prefix=/opt --libexecdir=/opt/lib --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-language=c,c++
打算把编好的gcc-4.1装到/opt/bin去,这样就不会跟原系统上的gcc有冲突了
3. 开始编译
time make -j4 bootstrap
在此处,time是为了知道整个编译需时多少,make後面的-j4是要指示系统执行4条并行编译,提高效率,bootstrap有特别作用,它指示gcc要对自己进行多次编译及较对。首先系统的gcc-3.3对gcc-4.1编译出stage1的xgcc,然後stage1的xgcc对源码编译出stage2的xgcc,接着stage2的xgcc对源码再编译出stage3的xgcc,若果stage2跟stage3的xgcc对比正确无误,编译便算成功,得出来的gcc-4.1便完全不依赖原系统上的gcc-3.3 compiler
其实上述的部骤对做过LFS的朋友都很熟识了
偶的破电脑是一台PII350+192MB SDRAM。天!这种破难配置花了足591分钟零7秒,近10个小时才完成这一部骤。用du -sh看一下吓了一跳,在一个8GB ext3分区内被吃掉了885MB完间~~
4. 安装gcc-4.1
既然是用Debian系统作白老鼠之用,最好是打包成deb,因此不用make install,改用checkinstall -D来安装(当然系统要装好checkinstall在先),另一番折腾後,一个43MB的gcc-4.1_20051112-1.i386.deb包
终於完成及安装好了,再看一下使用空间,连带刚才的一共用了995MB,近1GB的硬盘空间。当然,这1GB在软件安装好之後是可以删除的。
5. 试验1,用gcc-4.1测试编译wine
公司要用一个很讨厌的软件叫Lotus Notes,天生只有Linux的Dominio Server,无Linux的Client。只能用wine来跑M$的Client,代价就是慢了。要提速,其一方法当然是重新编译wine了。
原系统是用gcc-3.3.5编译的wine-20040505,运作一切良好,只是慢罢了
用新的gcc-4.1尝试编译wine-20040505,把wine-20040505.tar.gz源码解压及转到wine-20040505目录下
CC=/opt/bin/gcc ./configure --prefix=/usr 一切正常
make depend 一切正常
make -j4 五分钟後死掉了,看来是旧版wine的语法未能符合gcc-4.1的要求了
只好下载最新的wine-0.9.2重试,把wine-0.9.2.tar.bz2源码解压及转到wine-0.9.2目录下
CC=/opt/bin/gcc ./configure --prefix=/usr 一切正常
make depend 一切正常
time make -j4 一切正常。
共花了190分钟30秒及916MB硬盘空间终於编译好了
立即用它来跑Notes Client,启动及登陆Notes Server都没问题,COOL!
运作速度是明显地提升了,反应也快速了,再试e-mail的收发好像也没问题,太好了。
继续试workflow,一切正常,好棒!
可是,不能高兴得太早,用e-mail试开或试加attachment时wine跑的Notes Client就会马上死掉,这种情况其实我过去用gcc-3.4或gcc-4.0编译wine的时候曾经面对过的,看来ABI不兼容问题还是存在。
唉!死症~~
6. 试验2,用gcc-4.1测试编译内核
在Linux系统,有4个(类)主要的软件对系统的性能起了关键性的影响,它们是:(a)内核,(b)glibc,(c)X-window自身,即XFree86或者X.org及(d)X的桌面环境,如Gnome、KDE等。即是说,要提升系统的性能是可以从这些软件着手的,可是:
-- 从源码升级glibc是有很高难度而且很危险的,弄不好随时可以令系统挂掉,虽然也有方法去修理,见 用Knoppix修理Debian系统 考虑了gcc-4.1-20051112本身已很多bug,不试也罢了!
-- XFree86/X.org/Gnome/KDE等都是庞然大物,记得LFS版终极幻想斑竹在他的3400+ 64位CPU+4GB内存+1TB RAID硬盘的强劲电脑下编译KDE约要4~5小时,唉~~看我的破电脑上还是不好试,算了
剩下来而且有把握成功的自然是测试编译kernel了
我的系统正在用2.6.13内核,没有装yaird,那麽就编译2.6.13.4内核吧
把linux-2.6.13.4.tar.bz2源码解压及转到linux-2.6.13.4目录下,执行:
make mrproper 这是良好习惯,下回来的source tree同样要清除一下
make menuconfig 把旧的config读进来再save as .config就是了
编译前先修改一下Makefile
在第一个MAKEFLAGS那一行加入 -j4 指示系统编译时用4条并行编译,提高效率
MAKEFLAGS += -j4 --...
另外修改HOSTCC及HOSTCXX让它们指向新编好的gcc-4.1来用
HOSTCC=/opt/bin/gcc
HOSTCXX=/opt/bin/g++ (内核是用c写的,其实这个不是绝对需要)
存档後便可以开始了,执行:
time make-kpkg --append-to-version -custom kernel-image
好不容易又过了156分钟27秒及花了447MB硬盘空间,一个十几MB的kernel-image-2.6.13.4-xxxxx-custom.i386.deb终於完成了。Runtime performance的提升,代价是沉长的编译时间(Compile time),用gcc-4.1编译内核所花的时间明显比gcc-3.3长N久了,记得用gcc-3.3编2.6.13内核时只花了2个小时左右,现在却要2个半小时
不管了,马上用dpkg -i安装及重启之。启动时没有发现异常,可顺利进入bash shell,再入X用wine来运行Lotus Notes Client。呵呵,重未如此快速过,反应奇快,感觉超爽,好不快哉!简直是变相升级了硬件似的,真希望把XFree86也来编译一次。。。
结语:
1. gcc-4.1虽然未正式release,尚在开发阶段,而且仍有N多的bugs未改正,但gcc-4.1是绝对值得大家期待的
2. gcc-4.1跟gcc-3.4及gcc-4.0同属第2版的ABI,跟部份采用gcc-3.3(用第1版的ABI)编译出来等运行环境仍有不兼容之处,也就是说gcc-4.1推出之日,它可以完全取缔gcc-3.4及gcc-4.0,而gcc-3.3暂时仍有存在价值
3. Debian的developers为求稳定及高兼容性,所以非常保守,软件包大多是为i386而做,结果是系统严重被underpowered,想将系统的潜能发挥出来,自行编译软件是免不了的。因此撰写本文的时候尽量写得详细,希望对新手们或有意自行编译软件的兄弟们有叁考价值
待将来gcc-4.1正式推出後,有机会一定再作更详细的试验。。。 |
|