Установил более новую версию Boost, и теперь система запуталась.

Мне нужно было установить более новую версию Boost (1.67) на моем Ubuntu 14.04, но я, вероятно, сделал это неправильно, и теперь все сломано.

Немного предыстории и то, как моя система пришла туда, где она есть

Я загрузил Boost 1.67 и попытался установить его из исходников, я сделал несколько вещей, чтобы сделать это, но из того, что я помню:

  • Downloaded Boost 1.67 с веб-сайта boost в мою папку «Загрузки».
  • ./ 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), если я не укажу путь к более новой версии. Есть идеи, как это сделать?

2
задан 21 July 2018 в 17:33

1 ответ

В 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

Надеюсь, это поможет людям, у которых большие проблемы, как я.

1
ответ дан 11 June 2020 в 04:12

Другие вопросы по тегам:

Похожие вопросы: