多版本gcc共存问题的解决方法

发布: 2010-03-11 16:48



-



现在使用的gentoo系统中,总共三个版本的gcc,版本号分别为:



gcc-4.3.4



gcc-4.4.3



gcc-4.5.0-alpha



自从gcc-4.4.0开始,gcc支持一种编译优化方案,在gentoo中表现为USE选项graphite。



这个选项与两个库有关,分别为: ppl, cloog-ppl。



也就是说,如果开启了graphite选项,后面两个版本同时使用了ppl, cloog-ppl库,但是
我这情况是,经常使用的版本为gcc-4.5.0-alpha,除非遇到这个版本编译不过的包,才退回到
gcc-4.4.3版本。那么,ppl和cloog-ppl这两个库也都是使用gcc-4.5.0-alpha编译的,现在
的问题是,这两个库在普通情况下使用的gcc-4.5.0-alpha带的libstdc++库,当退回
到gcc-4.4.3版本后,ppl和cloog-ppl依然依赖于gcc-4.5.0-alpha带的libstdc++库,
使用gcc-4.4.3版本的libstdc++库不行,也就是gcc-4.4.3不能用了。




现在要解决的就是能让gcc-4.4.3正常运行,一种方法就是在gcc-4.4.3中去掉graphite选项,
还好在gentoo中有方法能让同一个包的不同版本使用不同的USE选项,我的选择是,在/etc/portage/package.use中加入两行,



sys-devel/gcc graphite
=sys-devel/gcc-4.4.3 -graphite



这样,gcc-4.4.3就不再使用ppl和cloog-ppl库了。



另外,在gentoo系统中/etc/make.conf中最好不要配置-floop-interchange -floop-strip-mine -floop-block这几个编译优化参数,
否则还是容易引起一些编译兼容性问题。



不过也有一个问题,就是要维护不同版本gcc的USE选项,稍有麻烦。



可以开始了,第一步,切换到gcc-4.5.0-alpha,其实这是系统中当前唯一能正常使用gcc了。
使用新的USE选项重新编译gcc-4.4.3。



第二步,切换到gcc-4.4.3,现在这个版本的gcc就可以正常使用了 。如果有什么不放心的,
还可以使用这个gcc再重新编译一个自己。



第二种解决方法,如果使用gcc-4.4.3编译 ppl 和 cloog-ppl,那么,在切换到gcc-4.5.0-alpha之后,
应该可以使用,但是,由于我默认常用的是最新的gcc-4.5.0-alpha版本,可能在哪次不小心的时候就会使用
它升级这两个库了,前面的解决就又需要重新执行一遍,虽然很好,但太容易反复出现问题,我目前不使用这种方法。







原文: http://qtchina.tk/?q=node/403

Powered by zexport