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 <functional>
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
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 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
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.
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 |