我需要在我的 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_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 的版本是否在此更改后发生变化。不幸的是,没有。
不幸的是,尝试了所有这些措施之后,什么都没有任何改变。
我想将系统恢复为原来的状态,即系统 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
希望它能够帮助那些和我一样深陷困境的人们。