Em primeiro lugar, graças ao rici por responder, o método dele funciona, mas eu acabei de encontrar um que é melhor para mim.
primeiro, salve o antigo gcc com um nome diferente para o caso de as coisas darem errado:
mv /usr/bin/gcc /usr/bin/gcc_old
mv /usr/bin/g++ /usr/bin/g++_old
eu vinculo minha nova compilação ao gcc e copio algumas coisas importantes:
ln -s -f /opt/gcc-4.6.3/bin/gcc /usr/bin/gcc
ln -s -f /opt/gcc-4.6.3/bin/g++ /usr/bin/g++
cp /opt/gcc-4.6.3/lib64/libstdc++.so.6.0.16 /usr/lib64/.
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln -s -f /usr/lib64/libstdc++.so.6.0.16 /usr/lib64/libstdc++.so.6
Meus agradecimentos a Jacky Wei, da equipe de hip-hop do facebook, pela ajuda. Espero que isso ajude outras pessoas também.