Мне нужно было установить более новую версию Boost (1.67) на моем Ubuntu 14.04, но я, вероятно, сделал это неправильно, и теперь все сломано.
Я загрузил Boost 1.67 и попытался установить его из исходников, я сделал несколько вещей, чтобы сделать это, но из того, что я помню:
./ bootstrap.sh
./ b2 install
sudo echo "$ installDir / lib ">> /etc/ld.so.conf.d/boost-1.56.0.conf"
, а затем я выполнил sudo ldconfig -v
. Первоначальная проблема при установке в новой версии Boost я не предоставил флаг - prefix
, чтобы указать место для установки новой версии Boost, и я подозреваю, что эта новая версия Boost переопределяет системный Boost.
После этого и после того, как я понял, что мне нужно указать - prefix
флаг с путем для установки Boost там, где я хочу, я снова запустил установку, но теперь предоставил - префикс
флаг с путем /home/myusername/.boost1_67_0
.Теперь я могу видеть в разделе /home/myusername/.boost1_67_0
Boost 1.67 установлен.Я даже пытался установить старую версию Boost 1.64 до /home/myusername/.boost1_64_0
.
Итак, насколько я понимаю, в моей системе Boost 1.64 установлен где-то, я не знаю где (потому что я не предоставил флаг - prefix
, подозревая, что это вызвало всю проблему), У меня также установлены Boost 1.67 и Boost 1.64 в /home/myusername/.boost1_67_0
и /home/myusername/.boost1_67_0
соответственно. libboost-all-dev
и libboost-dev
также устанавливаются из диспетчера пакетов.
Выполняется:
dpkg -s libboost-dev | grep 'Version'
Version: 1.54.0.1ubuntu1
Я вижу, что версия libboost-dev
- 1.54, и система знает об этом.
Выполняется следующий код C ++:
#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;
}
Я получаю вывод, что версия Boost - 1.67.
Я пытался удалить libboost-all-dev и переустановить и даже запустить sudo apt install --reinstall libboost-all-dev
, но проблема в не решено.
sudo dpkg-reconfigure libboost-all-dev
sudo apt-get purge libboost-all-dev && sudo apt-get install libboost-all-dev
Затем я попытался посмотреть, что происходит в /etc/ld.so.conf.d
, вот файлы там:
-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
Я пытался изменить там файл boost.conf
, который содержал одну строку с путем к каталогу Boost. Я изменил путь на Boost 1.64, который находится в /home/myusername/.boost1_64_0
, а затем я запустил sudo ldconfig
.Я снова скомпилировал приведенный выше код C ++, чтобы проверить, изменилась ли версия Boost после этого изменения. К сожалению, нет.
К сожалению, после всех этих действий ничего не изменилось.
Я хотел бы восстановить систему в том виде, в каком она была, в том смысле, что по умолчанию используется ускорение системы (libboost-all-dev, версия 1.54), если я не укажу путь к более новой версии. Есть идеи, как это сделать?
В CMake вы можете добавить в свои списки CMake
следующее:
# 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")
Этот метод сэкономил мне несколько месяцев. можешь попробовать. Кстати, в качестве временного решения вы можете переименовать каталоги, которые вы не ожидаете найти, как показано ниже:
sudo mv /usr/local/include/boost /usr/local/include/boost_bak
Надеюсь, это поможет людям, у которых большие проблемы, как я.