Ubuntu23.10下处理libncurses5-dev包的安装问题

导语

使用Ubuntu23.10的时候,遇到需要termios的场景,结果发现无论是codeblocks还是系统本身的gcc都无法找到term.h和curse.h,网上找了很多解决方案都不适用,因为自己遇到的情况比较特殊,但好在最后用aptitude包解决了依赖问题,这里记录一下解决的流程,方便以后他人使用

环境准备

首先是Ubuntu的版本,具体如下

在这里插入图片描述

其次是由于网络问题,建议把对应的下载源换成国内的,我选择的是阿里云

问题和解决方案

换好源之后,我首先执行了 sudo apt-get update命令,这个命令会把系统内所有的包都更新,但问题也在这里,libncurses5-dev其实有更新的版本,这条命令会使得系统安装libncurses5-dev更新的版本,最新版本并不和codeblocks适用,原先的-lcurses命令也无法用在最新的版本上

如果这个时候尝试直接安装libncurses5-dev,可能会出现下面的提示

在这里插入图片描述

会发现无法安装,然后如果尝试卸载现有的最新版本也可能卸载失败,原因是最新版本和其他的包已经相互形成了复杂的依赖关系,系统并不支持删除

对于这种情况,就需要将最新版本删除并重新安装,直接用rm是不行的,这里就需要安装aptitude管理包,它可以有效且自动的管理包之间的依赖关系和管理关系

首先是安装,命令和结果如下

在这里插入图片描述

安装完之后使用aptitude强制回退libncurse的版本

在这里插入图片描述

但这里需要注意的是,aptitude有很多方案,我们不能直接选择默认方案,那样是无效的

在这里插入图片描述
这里不接受第一个

在这里插入图片描述

第二个也不接受

在这里插入图片描述
接受第三个方案,这样就能强制降级libncurse到指定的版本了

在这里插入图片描述

可以简单写个要用到termios的程序试试,如果上面这行命令执行没有出错就代表安装成功了

总结

Linux系统里包之间的依赖关系非常复杂,有时候并不是最新的就最好,当遇到需要使用指定版本的包时可以通过aptitude来自动实现,但前提是选对方案

参考文献

  1. ubuntu无法修正错误,因为您要求某些软件包保持现状…解决办法
  2. Ubuntu更换阿里云镜像源
  3. 百度AI助手
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐