3

I needed to install a newer version of Boost (1.67) on my Ubuntu 14.04 but I have probably done it in the wrong way and now everything is broken.

Some background and how my system came to where it is

I have downloaded Boost 1.67 and tried to install it from source, I have done multiple things to do this, but from what I remember:

  • Downloaded Boost 1.67 from the boost website into my Downloads folder.
  • ./bootstrap.sh
  • ./b2 install
  • And then I ran something (not exactly the same with the code below but similar approach, that I cannot recall) sudo echo "$installDir/lib" >> /etc/ld.so.conf.d/boost-1.56.0.conf" and then I ran sudo ldconfig -v.

The initial problem when I installed the new version of Boost it was that I haven't provided the --prefix flag to specify a location to install the new version of boost, and I suspect that this new version of Boost override the system Boost.

After that, and after I realise that I needed to provide the --prefix flag with a path to install Boost where I want, I ran again the installation but providing now the --prefix flag with the path /home/myusername/.boost1_67_0. Now I can see under /home/myusername/.boost1_67_0 Boost 1.67 installed. I even tried to install an older version, Boost 1.64 to /home/myusername/.boost1_64_0.

So from what I understand, my system has Boost 1.64 installed somewhere that I don't know where (because I haven't provided the --prefix flag, suspecting this caused the whole problem), I also have Boost 1.67 and Boost 1.64 installed to /home/myusername/.boost1_67_0 and /home/myusername/.boost1_67_0 respectively. The libboost-all-dev and libboost-dev are also installed from the package manager.

Running:

dpkg -s libboost-dev | grep 'Version'
Version: 1.54.0.1ubuntu1

I see that the libboost-dev version is 1.54 and the system is aware of it.

Running the following C++ code:

#include <boost/version.hpp>
#include <iostream>
#include <iomanip>

int main() {
  std::cout << "Boost version: " << BOOST_VERSION / 100000 << "/" << BOOST_VERSION / 100 % 1000 << "." << BOOST_VERSION % 100 << std::endl;
  return 0;
}

I get an output that Boost version is 1.67.

Things I have tried to resolve the problem myself

  • I tried to delete libboost-all-dev and reinstall and even run sudo apt install --reinstall libboost-all-dev but the problem is not solved.

  • sudo dpkg-reconfigure libboost-all-dev

  • sudo apt-get purge libboost-all-dev && sudo apt-get install libboost-all-dev

I have then tried to see what is going on in /etc/ld.so.conf.d, here are the files in there:

-rw-r--r-- 1 root root  25 Jul 21 11:51 boost.conf
-rw-rw-r-- 1 root root  38 Mar 24  2014 fakeroot-x86_64-linux-gnu.conf
lrwxrwxrwx 1 root root  41 Oct 24  2017 i386-linux-gnu_EGL.conf -> /etc/alternatives/i386-linux-gnu_egl_conf
lrwxrwxrwx 1 root root  40 Oct 24  2017 i386-linux-gnu_GL.conf -> /etc/alternatives/i386-linux-gnu_gl_conf
-rw-r--r-- 1 root root 108 Jan 15  2018 i686-linux-gnu.conf
-rw-r--r-- 1 root root  44 Aug  9  2009 libc.conf
-rw-r--r-- 1 root root   0 Jul 20 10:55 local.conf
-rw-r--r-- 1 root root  68 Apr 12  2014 x86_64-linux-gnu.conf
lrwxrwxrwx 1 root root  43 Oct 24  2017 x86_64-linux-gnu_EGL.conf -> /etc/alternatives/x86_64-linux-gnu_egl_conf
lrwxrwxrwx 1 root root  42 Jun  5 09:02 x86_64-linux-gnu_GL.conf -> /etc/alternatives/x86_64-linux-gnu_gl_conf
lrwxrwxrwx 1 root root  57 Jan 24 13:45 x86_64-linux-gnu_mirclientplatform.conf -> /etc/alternatives/x86_64-linux-gnu_mirclientplatform_conf
-rw-r--r-- 1 root root  56 Jun 16  2017 zz_i386-biarch-compat.conf
-rw-r--r-- 1 root root  58 Jun 16  2017 zz_x32-biarch-compat.conf

I tried to modify the boost.conf file in there, which contained a single line with a path to the Boost directory. I changed the path to Boost 1.64 which is located under /home/myusername/.boost1_64_0 and then I ran sudo ldconfig. I went to compile again the above C++ code to check if the version of Boost changed after this change. Unfortunately is not.

Nothing have changed after trying all these actions, unfortunately.

I would like to restore the system as it was in the sense of having the system boost (libboost-all-dev, version 1.54) as the default unless I provide a path to a newer version. Any ideas on how to do this?

Phrixus
  • 333
  • 2
    If you didn't specify a --prefix during the original install, it likely went into /usr/local (i.e. headers into /usr/local/include/boost and the - few - actual libs into /usr/local/lib) - look there. – steeldriver Jul 21 '18 at 18:10
  • I have a lot in /usr/include/boost (not /local/) but nothing in /usr/local/lib. Does that mean my installation is broken? I am running a Raspberry Pi. – bomben Sep 04 '19 at 08:21

1 Answers1

2

In CMake, you can add the following to your CMakelists:

# install boost by apt-get method
include_directories(BEFORE SYSTEM "/usr/include") 

#  or install by building from src
# include_directories(BEFORE SYSTEM "/usr/local/include") 

This method saved my serveral months. you can try it. By the way, as a temporary solution, you can rename directories you don't expect to find as below:

sudo mv /usr/local/include/boost /usr/local/include/boost_bak

Hopefully, it will help people who are in deep trouble like me.