我删除了 /usr/include/boost,安装 libboost-all-dev 不会带回标题

我删除了 /usr/include/boost,安装 libboost-all-dev 不会带回标题

我的 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只要您没有手动安装这些软件包,并且没有安装任何依赖于它们的其他软件包,卸载确实会使这些软件包自动被删除。这就是为什么autoremovelibboost-all-dev卸载时执行操作应该可以解决问题的原因。

如果没有,您可以通过列出当前安装的并且可能与 Boost 相关的软件包来进一步调查:

apt list --installed '*boost*'

然后,您可以重新安装它们sudo apt --reinstall install ...,或者更好的方法是卸载它们,然后libboost-all-dev重新安装以恢复它们。我认为这更好,因为这样它们就不会被标记为手动安装,因此如果您删除它们libboost-all-dev并且没有其他依赖它们,它们将来就可以被自动删除。

当然,卸载软件包时,请务必查看apt-- 或apt-get,或您正在使用的任何命令 -- 表示将要执行的操作。特别是,如果您要卸载看似与 Booost 相关的软件包,而与之一起删除的软件包似乎与 Boost 无关或数量庞大,则您应该不愿意继续。非 Boost 软件包可能会依赖于与 Boost 相关的软件包。


关于您原来的编译错误问题,您可以考虑在取回标题后就该问题发布一个单独的问题。

更一般地,如果你想尝试删除由包管理器安装的文件以解决问题,最好使用包管理器卸载它们。如果你必须手动删除文件,你应该考虑移动将它们放在其他地方,这样您就可以在必要时轻松恢复它们,而不是直接删除它们。幸运的是,删除对系统运行不重要的软​​件包的文件(如您所做)通常可以通过重新安装正确的软件包轻松撤消。

相关内容