Note: I’ve since updated the build server in question to Ubuntu 12.04, where the default GCC is 4.6.3. It seems that at least some of these issues have been corrected in GCC. Your mileage may vary. –Alan, April 28, 2012
I’ve been having some problems with Ubuntu 11.10’s default GCC (4.6.2) for some time now. First, I was having problems with self-kang CyanogenMod 9 builds on my Samsung Tab 7 Plus (specifically, adb wouldn’t work). Second, I couldn’t boot Linux kernel 3.3 on
my Sandy Bridge Core i7-2600 build server.
I didn’t know the problems were because of GCC until recently, but now that I’ve switched back to 4.4 both of those problems have gone away; I can only assume that something in Ubuntu’s GCC fork is broken. The solution: set GCC 4.4 as the default compiler.
It’s pretty easy to do this in Debian-based distros using the alternatives system.
Install GCC 4.4
First, install GCC 4.4 (and friends):
$ apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib
Set 4.4 to be the default
Then set 4.4 to be higher priority than 4.6:
$ update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
$ update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 50
$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 50
Verify that it has worked:
gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.6-11ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-werror
--with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.6 (Ubuntu/Linaro 4.4.6-11ubuntu2)