我的 boost::thread 库头(我没有碰过)中出现了一个疯狂的编译错误,所以我删除了/usr/include/boost
。
我清除了libboost-all-dev
然后又做了sudo apt-get install libboost-all-dev
,但标题却没有回来。
我应该怎么办?
答案1
再次卸载libboost-all-dev
,然后运行sudo apt autoremove
,然后libboost-all-dev
再次安装。这通常会起作用。这些命令是实现此目的的一种方法:
sudo apt remove libboost-all-dev
sudo apt autoremove
sudo apt install libboost-all-dev
如果愿意,您可以使用purge
而不是remove
和--purge autoremove
普通的autoremove
,但在这种情况下听起来您需要恢复的文件不是conffiles,所以这应该无关紧要。
libboost-all-dev
是元包。它不直接提供任何 Boost 库,而是通过声明其他提供这些库作为依赖项的包来安装它们(运行apt show libboost-all-dev
以了解详细信息)。卸载libboost-all-dev
不会删除这些包,而且由于您libboost-all-dev
再次安装时它们仍处于安装状态,他们没有重新安装。
但是,libboost-all-dev
只要您没有手动安装这些软件包,并且没有安装任何依赖于它们的其他软件包,卸载确实会使这些软件包自动被删除。这就是为什么autoremove
在libboost-all-dev
卸载时执行操作应该可以解决问题的原因。
如果没有,您可以通过列出当前安装的并且可能与 Boost 相关的软件包来进一步调查:
apt list --installed '*boost*'
然后,您可以重新安装它们sudo apt --reinstall install ...
,或者更好的方法是卸载它们,然后libboost-all-dev
重新安装以恢复它们。我认为这更好,因为这样它们就不会被标记为手动安装,因此如果您删除它们libboost-all-dev
并且没有其他依赖它们,它们将来就可以被自动删除。
当然,卸载软件包时,请务必查看apt
-- 或apt-get
,或您正在使用的任何命令 -- 表示将要执行的操作。特别是,如果您要卸载看似与 Booost 相关的软件包,而与之一起删除的软件包似乎与 Boost 无关或数量庞大,则您应该不愿意继续。非 Boost 软件包可能会依赖于与 Boost 相关的软件包。
关于您原来的编译错误问题,您可以考虑在取回标题后就该问题发布一个单独的问题。
更一般地,如果你想尝试删除由包管理器安装的文件以解决问题,最好使用包管理器卸载它们。如果你必须手动删除文件,你应该考虑移动将它们放在其他地方,这样您就可以在必要时轻松恢复它们,而不是直接删除它们。幸运的是,删除对系统运行不重要的软件包的文件(如您所做)通常可以通过重新安装正确的软件包轻松撤消。