安装了新版本的 Boost,现在系统很混乱

安装了新版本的 Boost,现在系统很混乱

我需要在我的 Ubuntu 14.04 上安装较新版本的 Boost (1.67),但是我可能以错误的方式执行了此操作,现在一切都崩溃了。

一些背景知识以及我的系统如何发展到现在这个样子

我已经下载了 Boost 1.67 并尝试从源代码安装它,我做了多件事来做到这一点,但据我记得:

  • 从 boost 网站下载 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 安装在我想要的位置,于是我再次运行安装,但现在--prefix为标志提供了路径/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_0libboost-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 的版本是否在此更改后发生变化。不幸的是,没有。

不幸的是,尝试了所有这些措施之后,什么都没有任何改变。

我想将系统恢复为原来的状态,即系统 boost(libboost-all-dev,版本 1.54)为默认设置,除非我提供更新版本的路径。关于如何做到这一点,有什么想法吗?

答案1

在 CMake 中,您可以将以下内容添加到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") 

这个方法拯救了我好几个月的时间。你可以试试。顺便说一句,作为临时解决方案,你可以重命名你不希望找到的目录,如下所示:

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

希望它能够帮助那些和我一样深陷困境的人们。

相关内容