Backporting to older platforms ============================== :Date: 11/2015 :toc: GCC-4.9 ------- Currently (as of 8/2015), we require a quite recent compiler and likewise a suitable C++ standard library for the build. The reason is that we set the language compatibility level to `-std=gnu++14`. If you're on a platform with an older compiler and standard library, you need a way to install a recent toolchain in a way, that the standard library includes like e.g. `#include ` will indeed pick up a suitably modern standard library, in addition to being compiled with a recent compiler (GCC-4.9 or CLang 3.5). The way to achieve this is different for every distribution; we'll show the solution for »Ubuntu Trusty 14.04 LTS« here as an example GCC and Libstdc++ 4.9 on Ubuntu Trusty ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ While the standard compiler for Unbutu in 2014 was GCC-4.8, the _Ubuntu Toolchain Project_ provides builds and packages for more recent toolchains through an _PPA_. So we'll add that PPA as an additional package source, install a GCC-4.9 with the accompanying standard library, and finally switch the system standard for C/C++ compiler to this new version. All these steps are reversible and can be deactivated when causing problems elsewhere... * add the https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test[Ubuntu Toolchain PPA]: + ---- sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update ---- * get the compiler and standard library + ---- sudo apt-get install gcc-4.9 g++-4.9 ---- * switch the system standard for ``C compilation'' -- make sure to tie the switch for C and C++ compiler, to avoid mixing generated code for incompatible library versions. + ---- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.9 ---- Assuming you've also installed the standard gcc`(4.8)` package, you can arrange matters such as to be able to switch back and forth between both compilers. For this to work, we need also to make the (default) gcc-4.8 an option in the choice ---- sudo apt-get install gcc-4.8 g++-4.8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 ---- From this point on, we can switch configuration by ---- sudo update-alternatives --config gcc ---- Building on Mint 17.2 (Rafaela) -- gcc and Libstdc++ 4.9 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Since Mint is based on Ubuntu LTS, we're facing pretty much the same situation here. But what makes matters yet more confusing is the fact, that Mint offers even a Clang-3.6 package, which is _unfortunately_ built to rely on the gcc-4.8 libraries; there is a known header inclusion bug in these libraries, which kicks in as soon as we switch to C++14. Thus it is _mandatory_ to install the gcc-4.9 from above mentioned Ubuntu-Toolchain PPA, which is indeed linked against the 4.9 libraries. Stay away from Clang on Mint for now! Transcript from a build session on a ``pristine'' Mint 17.2 installation: * add the following to your `/etc/apt/sources.list` + ---- deb https://lumiera.org/debian/ rafaela experimental deb-src https://lumiera.org/debian/ rafaela experimental ---- * install _Ichthyo's_ DEB signing key + ---- gpg --keyserver keyserver.ubuntu.com --recv A1DE94B2 gpg --export -a A1DE94B2 | sudo apt-key add - ---- * prepare build environment + ---- sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install build-essential gcc-4.9 g++-4.9 git-core sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.9 sudo apt-get build-dep lumiera ---- + after that, your system is prepared for building Lumiera * now build * either by (re)compiling the debian package + ---- apt-get source lumiera cd lumiera dpkg-buildpackage ---- * or check out the source and hack away... + ---- git clone git://git.lumiera.org/LUMIERA cd LUMIERA scons CC=gcc-4.9 CXX=g++-4.9 ---- + ...as usual, from this point on, the compiler setting will be remembered in the file `optcache`, so no need to repeat it for subsequent `scons` invocations. TIP: Just run `scons` for standard build or run the testsuite with `scons check`. Use the switch `-j#` with # corresponding to the number of your cores. Probably you'll need at least 2GB of memory on AMD64, to build with `-j6`