今天在升级我自己打磨的Gentoo时,当emerge到sys-block/thin-provisioning-tools时,ebulid进程被中断了,然后在log中看到如下错误信息"cc1plus error unrecognized command line option ‘-std=c++11’",在google无果的情况下前去gentoo的irc频道求助,这才得知,当emerge新的gcc之后,系统并不会自动启用更新版的gcc,而会仍旧使用旧的,这样一来就可能会出现某些命令行选项无法被正确识别的问题.之后根据irc中其他网友给出的建议,参考 Gentoo Gcc Upgrade Guide 启用了新的gcc,这里简要记录一下使用到的命令,以便将来需要时查看.
Wangqige wankey # gcc-config -l
[1] x86_64-pc-linux-gnu-4.6.3 *
[2] x86_64-pc-linux-gnu-4.7.3 Wangqige wankey # gcc-config 2 * Switching native-compiler to x86_64-pc-linux-gnu-4.7.3 ... >>> Regenerating /etc/ld.so.cache... [ ok ] * If you intend to use the gcc from the new profile in an already * running shell, please remember to do: * . /etc/profile Wangqige wankey # env-update >>> Regenerating /etc/ld.so.cache... Wangqige wankey # source /etc/profile Wangqige wankey # emerge --oneshot libtool
gcc-config -l是列出系统中已安装的所有gcc版本. 之后使用gcc-config 2选择使用第二个gcc版本,如果有更多个版本,则将2改为最新的那个版本相应的序号.随后的env-update和source /etc/profile用来让系统能够识别它. 当完成这些步骤之后,我们需要重建libtool,即上面最后一句命令.
最后,为了保证系统的健全状态,我们应该使用新的gcc重建一次系统(?真的吗?在最新的英文版中我没见到相关描述,只在中文版中看到,看来又是过时的吧)
emerge -eav system
emerge -eav world
如果希望将旧版本的gcc删除,我们可以使用类似如下命令
emerge -aC =sys-devel/gcc-3.4*