How do I install the latest version of gcc and g++?
I am using a variety of C++11 and C++1y features; which is why I need this.
You can install close to upstream version of GCC from Ubuntu Toolchain PPA: https://wiki.ubuntu.com/ToolChain#PPA_packages
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-4.9
Tested on Ubuntu 14.04.
teach a man to fish etc. etc.
How to build the source package and serve it from a local repository in an apt-friendly way. This will work on any distribution provided that dependencies can be satisfied/ This method does not require you to install build-deps for every package and polluting your machine with extraneous packages, this will let you keep up with packages as they get updated in debian experimental. It takes just a few minutes to do this once, and then can be reused to rebuild any package you need without relying on other people to package ppa for you or downloading a bunch of different .debs
The benefit of building vs. pulling raw .debs from debian is that this will build packages against the packages in your distribution which may differ in version/revision from what is used as build-dependencies for the debian distribution. This is more-or-less the process for backporting packages. You can also use any ubuntu distribution to build packages targeted at any other distribution (target in this case means build against the standard repository packages) with no hassle.
(not for ppa uploading - this has beurocratic requirements from launchpad
build-essential pubilder ubuntu-dev-tools among others)
Set up pbuilder (this lets you build a package in a chroot without polluting your system with build-dependency packages)
sudo pbuilder create,
pbuilder-dist [precise/oneric/trusy/etc...] create
Get debian source
pull-debian-source gcc-4.9 [4.9.0-6]specific debian revision is optional, but can be useful if you want to pull experimental/unstable/testing/stable revisions
sudo apt-get src
sudo pbuilder build gcc-4.9_4.9.0-6.dsc
.dscfile, for the most recent gcc it is
gcc-4.9_4.9.0-6.dscwhich is a package descriptor file.
.orig.tar.[gz/xz]is the source tarball.
Create local Apt-repository
cp /var/cache/pbuilder/result/* /path/to/repo
apt-ftp archive packages . > Packages
sudo echo "deb [trusted=yes] file:/local/repo/Packages ./" > /etc/apt/sources.list.d/gcc-repo.list
apt-get update; apt-get install gcc-4.9 g++-4.9
Using self-compiled packages to satisfy dependencies when building packages. (I have it set up with folders
~/pbuilder/precise_local (local package repo for precise) and
~/pbuilder/precise_hooks (for hook scripts) )
Add the following to your
OTHERMIRROR="deb [trusted=yes] file:///home/user/pbuilder/precise_local ./" BINDMOUNTS="/home/user/pbuilder/precise_local" HOOKDIR="/home/user/pbuilder/precise_hooks" EXTRAPACKAGES="apt-utils"
precise_hooks create a file
D05local (in typical unix/linux fashion, prefix
D tells when script is hooked
05 is self-imposed name-ordering and
local is just the name, if you only have one hook it is not important what its called as long as
D is the prefix
the script is a one-liner
(cd /home/user/pbuilder/precise_local ; apt-ftparchive packages . > Packages)
Now any packages placed in
precise_local will satisfy build-depends. This is supremely useful to construct a dependency tree locally when back-porting packages that have dependencies that also need backporting
To do this in an even cleaner way, use a VM image or LXC container to jail this mess.
you can apply custom patches in most debian packages using
quilt, quilt patches can use diffs from most VCSs (see : using quilt )
There is an additional step, you must rebuild the
.debian.tar.gz. Cleanest-way I know is
bzr-builddeb it has the highest success rate IMHO (compared to git-build-package and other helper scripts) and is much cleaner than calling
debuild directly (
bzr= bazaar canonical's VCS)
sudo apt-get install bzr-builddeb
.orig.tar.gzis extracted and
.debian.tar.gzis extracted and place in it
debian/patches/series(quilt also has utility to add patches or for you to modify on the fly, see documentation)
bzr add debian/
bzr builddeb -- -S -us -ucThis rebuilds the source file and leaves it unsigned (gpg signing required for PPA/distro uploading, but not for private local repos)
cd ../build-area/Continue from Step 3 above.
Steps 1-4 here are pretty much what you need to upload to a PPA (they do not take binary files), but you require some steps to satisfy launchpad bureaucracy (this answer provides a explanation, this one has some links)
sudo su - apt-get install build-essential add-apt-repository ppa:ubuntu-toolchain-r/test apt-get update apt-get install gcc-4.9 g++-4.9 cpp-4.9
after that if you check the version of gcc you will find the old version
so we can fix it with simple symbolic
cd /usr/bin rm gcc g++ cpp ln -s gcc-4.9 gcc ln -s g++-4.9 g++ ln -s cpp-4.9 cpp
// Actually i tried the symbolic & i know this will work but you may use the symbolic to get it without problems // please correct me if I am wrong
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 --slave /usr/bin/gcc gcc /usr/bin/gcc-4.9 update-alternatives --config gcc update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 40 --slave /usr/bin/cpp cpp /usr/bin/cpp-4.9 update-alternatives --config cpp update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9 update-alternatives --config g++
gcc-4.9 is just like the gcc-4.8 "ubuntu 14.04 gcc" it is not a big deference
Debian offers a package: https://packages.debian.org/jessie/gcc-4.9 - To prevent causing issues with Ubuntu/Debian compatibility; don't add it to your sources.list.
Instead, simply download all these:
binutils_2.25-5_amd64.deb cpp_4.9.2-2_amd64.deb g++_4.9.2-2_amd64.deb gcc_4.9.2-2_amd64.deb gcc-4.9-base_4.9.2-10_amd64.deb libasan1_4.9.2-10_amd64.deb libatomic1_4.9.2-10_amd64.deb libcilkrts5_4.9.2-10_amd64.deb libgcc1_4.9.2-10_amd64.deb libgcc-4.9-dev_4.9.2-10_amd64.deb libgomp1_4.9.2-10_amd64.deb libitm1_4.9.2-10_amd64.deb liblsan0_4.9.2-10_amd64.deb libmpfr4_3.1.2-2_amd64.deb libquadmath0_4.9.2-10_amd64.deb libstdc++-4.9-dev_4.9.2-10_amd64.deb libstdc++6 libtsan0_4.9.2-10_amd64.deb libubsan0_4.9.2-10_amd64.deb
From Debian's servers, e.g.:
Then install them, e.g.:
$ for package in *.deb; do sudo dpkg --install "$package"; done
[Easier just to run that bash loop a few times until all the dependencies are covered than remembering the order you downloaded them in!]
Currently (20141102) adding the PPA and invoking the above command
apt-get install gcc-4.9 g++-4.9 cpp-4.9 will print out a slew of suggested packages. Install them all except for libvtv0-dbg (which has a dependency conflict):
apt-get install gcc-4.9 g++-4.9 cpp-4.9 gcc-4.9-locales g++-4.9-multilib libstdc++6-4.9-dbg gcc-4.9-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan1-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libquadmath0-dbg lib32stdc++6-4.9-dbg libx32stdc++6-4.9-dbg
(skip the -dbg packages if they're of no interest to you), and then do an
apt-get dist-upgrade --auto-remove. That last step will basically replace your gcc-4.8 with gcc-4.9 (but not uninstall the older version), and pull in up-to-date fortran compilers at the same time.
I had to force the version for the gcc-4.9-base package to get past the error message you posted. Then installing worked
sudo apt-get install gcc-4.9-base=4.9.2-0ubuntu1~14.04
Now you can do the regular
sudo apt-get install gcc-4.9
Install GCC GNU 4.9
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-4.9
Remove the previous gcc version from the default applications list (if already exists)
sudo update-alternatives --remove-all gcc
Make GCC 4.9 the default compiler on the system
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20 sudo update-alternatives --config gcc
The latest update GCC 4.9.1 is a bug-fix release from the GCC 4.9 branch containing important fixes for regressions and serious bugs in GCC 4.9.0 with more than 88 bugs fixed since the previous release. In addition to that, GCC 4.9.1 release supports OpenMP 4.0 also in Fortran, rather than just in C and C++
Note : Checked on ubuntu 14.04 LTS