In the past 2
days, I was tortured by boost
. The default boost
version on Ubuntu 16.04
is 1.58
, but I met following compile errors:
......
/usr/include/boost/multi_index/detail/bucket_array.hpp: In static member function ‘static std::size_t boost::multi_index::detail::bucket_array_base<_>::size_index(std::size_t)’:
/usr/include/boost/multi_index/detail/bucket_array.hpp:84:62: error: invalid use of non-lvalue array
const std::size_t *bound=std::lower_bound(sizes,sizes+sizes_length,n);
^~~~~~~~~~~~
/usr/include/boost/multi_index/detail/bucket_array.hpp:85:25: error: invalid use of non-lvalue array
if(bound==sizes+sizes_length)--bound;
^~~~~~~~~~~~
/usr/include/boost/multi_index/detail/bucket_array.hpp:86:22: error: invalid use of non-lvalue array
return bound-sizes;
......
I downgraded boost
to 1.55
; and downloaded and built it:
$ ./bootstrap.sh --prefix=/usr/local
$ sudo ./b2 -a -q install
This time I found the default gcc-5
could not compile successfully. So I followed this post to install gcc-6
, and modified/home/nan/boost_1_55_0/tools/build/v2/user-config.jam
file to use gcc-6
to compile boost
:
......
# Configure specific gcc version, giving alternative name to use.
using gcc : 6 : g++-6 ;
......
Then my project can be compiled successfully. Check gcc
search header file path and library path:
$ echo | gcc-6 -E -Wp,-v -
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
......
$ ldconfig -v 2>/dev/null | grep -v ^$'\t'
/usr/local/cuda-9.0/targets/x86_64-linux/lib:
/usr/lib/x86_64-linux-gnu/libfakeroot:
/usr/local/lib:
/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu:
/usr/lib/nvidia-384:
/usr/lib32/nvidia-384:
/lib32:
/usr/lib32:
/lib:
/usr/lib:
/usr/lib/nvidia-384/tls: (hwcap: 0x8000000000000000)
/usr/lib32/nvidia-384/tls: (hwcap: 0x8000000000000000)
You will find the fresh installed boost 1.55
(in /usr/local
directory) always be found before default boost 1.58
(header files are in /usr/include/boost
and libraries in /usr/lib/x86_64-linux-gnu
).