Homebrew solution
To answer my own question, homebrew-versions
now has a fairly up to date formula of GCC. It can be installed using
brew install [flags] https://raw.github.com/Homebrew/homebrew-versions/gcc48.rb
Where [flags]
should include all the required languages, e.g. (--enable-cxx --enable-fortran
).
This will install the executables with a suffix, i.e. gcc
has to be accessed as gcc-version
to avoid clashes. If necessary, one can create appropriate symlinks to make this version the default.
Manual installation
Alternatively, an up-to-date GCC (as of the time of writing) can be compiled manually using the following shell script:
VERSION=4.7.0
PREFIX=/usr/gcc-$(VERSION)
LANGUAGES=c,c++,fortran
MAKE=make
# Or
# MAKE='make -j 4' # to compile using four cores
brew-path() { brew info $1 | head -n3 | tail -n1 | cut -d' ' -f1; }
# Prerequisites
brew install gmp
brew install mpfr
brew install libmpc
# Download & install the latest GCC
mkdir -p $PREFIX
mkdir temp-gcc
cd temp-gcc
wget ftp://ftp.gnu.org/gnu/gcc/gcc-$VERSION/gcc-$VERSION.tar.gz
tar xfz gcc-$VERSION.tar.gz
rm gcc-$VERSION.tar.gz
cd gcc-$VERSION
mkdir build
cd build
../configure \
--prefix=$PREFIX \
--with-gmp=$(brew-path gmp) \
--with-mpfr=$(brew-path mpfr) \
--with-mpc=$(brew-path libmpc) \
--program-suffix=-$VERSION \
--enable-languages=$LANGUAGES \
--with-system-zlib \
--enable-stage1-checking \
--enable-plugin \
--enable-lto \
--disable-multilib
$MAKE bootstrap
make install
# Uncomment for cleanup …
# cd ../../..
# rm -r temp-gcc
This will stage GCC into the path /usr/gcc-4.7.0
. Now all you need to do is either create symlinks to the executables or add the bin
directory to the $PATH
variable.
gcc-4.8 hello.c
gcc-4.8: error trying to exec 'as': execvp: No such file or directory
– Warren P Mar 27 at 21:36[flags]
? On my machines, I installed without any flags and it works fine. Why not you try to callgcc-4.8
without any input file and see if you get a fatal error? Also try tols /usr/local/Cellar/gcc48/4.8.0/bin
and see if that directory containsgcc-4.8
. – yihangho Mar 28 at 9:28gcc-4.8 --version
runs but it can't exec out to the secondary tool namedas
and so it dies. – Warren P Mar 28 at 12:19g++
as a command in my terminal? do I have to soft link/usr/local/Cellar/gcc48/4.8.1/bin/g++48
in my /usr/bin? – nkint Jun 7 at 14:32