Gue*_*OCs 3 apt dependencies compiling libraries
我在 boost::thread 库标头(我没有碰过)中遇到了疯狂的编译错误,所以我删除了/usr/include/boost.
我清除了libboost-all-dev然后做了sudo apt-get install libboost-all-dev,但是标题不会回来。
我应该怎么办?
libboost-all-dev再次卸载,然后运行,然后再次sudo apt autoremove安装。libboost-all-dev这通常会起作用。这些命令是实现此目的的一种方法:
sudo apt remove libboost-all-dev
sudo apt autoremove
sudo apt install libboost-all-dev
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以使用purge代替remove和--purge autoremove代替 plain autoremove,但在这种情况下,听起来您需要恢复的文件不是配置文件,因此这并不重要。
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*'
Run Code Online (Sandbox Code Playgroud)
然后,您可以重新安装它们sudo apt --reinstall install ...,或者更好的是,卸载它们,然后libboost-all-dev再次安装以恢复它们。libboost-all-dev我认为这样更好,因为这样它们就不会被标记为手动安装,因此如果您删除并且没有其他依赖于它们的东西,将来就有资格自动删除。
当然,在卸载软件包时,请确保查看apt--orapt-get或您正在使用的任何命令 -- 表示将完成什么操作。特别是,如果您要卸载看似与 Boost 相关的软件包,而随之删除的软件包似乎与 Boost 无关或数量很大,您应该不愿意继续。非 Boost 软件包可能依赖于 Boost 相关软件包。
关于您最初的编译错误问题,您可以考虑在取回标头后发布一个单独的问题。
更一般地说,如果您想尝试删除包管理器安装的文件以解决问题,最好使用包管理器来卸载它们。如果您确实必须手动删除文件,则应考虑将它们移动到其他位置,以便在必要时可以轻松恢复它们,而不是直接删除它们。幸运的是,删除属于对系统操作不是必需的包的文件(正如您所做的那样)通常可以通过重新安装正确的包来轻松撤消。
| 归档时间: |
|
| 查看次数: |
2591 次 |
| 最近记录: |