通过apt-get安装软件时碰到某个依赖包的版本和已有版本冲突的解决方法

本文的背景是需要树莓派上安装声卡阵列,为了验证声卡阵列的可用,需要在树莓派安装OSDA,然后另外找服务器安装ODSA_Web,然后通过OSDA发送监听到的声音到OSDA_Web作为呈现。
操作Reference: https://respeaker.io/4_mic_array/
当安装ODSA时碰到以下问题,原因是libasaound2-dev当前是依赖于libasound2这个库的1.0.28-1版本,但树莓派上已经有了另一个更新的版本1.0.28-1+rpi2

pi@raspberrypi:~ $ sudo apt-get install libasound2-dev 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出。 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: libasound2-dev : 依赖: libasound2 (= 1.0.28-1) E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决思路是使用aptitude这个命令安装,他可以智能地分析库之间的依赖关系,并给出调整建议。如下面的日志所示,按他的建议把libasound2这个库从1.0.28-1-rpi2版本降级到1.0.28-1版,即可成功安装libasaound2-dev(请注意11及15行的输入)
pi@raspberrypi:~/odas/build $ sudo aptitude install libasound2-dev 下列“新”软件包将被安装。 libasound2-dev{b} 0 个软件包被升级,新安装 1 个,0 个将被删除, 同时 2 个将不升级。 需要获取 94.9 kB 的存档。解包后将要使用 389 kB。 下列软件包存在未满足的依赖关系: libasound2-dev : 依赖: libasound2 (= 1.0.28-1) 但是 1.0.28-1+rpi2 已安装。 下列动作将解决这些依赖关系: 保持 下列软件包于其当前版本: 1)libasound2-dev [未安装的] 是否接受该解决方案?[Y/n/q/?] n // **在这里否决维持现状的方案** 下列动作将解决这些依赖关系: 降级 下列软件包: 1)libasound2 [1.0.28-1+rpi2 (now) -> 1.0.28-1 (oldstable)] 是否接受该解决方案?[Y/n/q/?] Y // **在这里选择降级的方案** 下列软件包将被“降级”: libasound2 下列“新”软件包将被安装。 libasound2-dev 0 个软件包被升级,新安装 1 个,1 个被降级,0 个将被删除, 同时 2 个将不升级。 需要获取 411 kB 的存档。解包后将要使用 329 kB。 您要继续吗?[Y/n/?] Y 读取: 1 https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie/main libasound2 armhf 1.0.28-1 [316 kB] 读取: 2 https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie/main libasound2-dev armhf 1.0.28-1 [94.9 kB] 已下载 411 kB,耗时 0秒 (440 kB/s) dpkg:警告:即将把 libasound2:armhf 从 1.0.28-1+rpi2 降级到 1.0.28-1 (正在读取数据库 ... 系统当前共安装有 119680 个文件和目录。) 正准备解包 .../libasound2_1.0.28-1_armhf.deb... 正在将 libasound2:armhf (1.0.28-1) 解包到 (1.0.28-1+rpi2) 上 ... 正在选中未选择的软件包 libasound2-dev:armhf。 正准备解包 .../libasound2-dev_1.0.28-1_armhf.deb... 正在解包 libasound2-dev:armhf (1.0.28-1) ... 正在处理用于 libc-bin (2.19-18+deb8u10) 的触发器 ... 正在设置 libasound2:armhf (1.0.28-1) ... 正在设置 libasound2-dev:armhf (1.0.28-1) ... 正在处理用于 libc-bin (2.19-18+deb8u10) 的触发器 ...

【通过apt-get安装软件时碰到某个依赖包的版本和已有版本冲突的解决方法】最后检查一下是否成功安装
pi@raspberrypi:~ $ dpkg -s libasound2-dev Package: libasound2-dev Status: install ok installed Priority: optional Section: libdevel Installed-Size: 380 Maintainer: Debian ALSA Maintainers Architecture: armhf Multi-Arch: same Source: alsa-lib Version: 1.0.28-1 Provides: libasound-dev Depends: libasound2 (= 1.0.28-1) Suggests: libasound2-doc Description: shared library for ALSA applications -- development files This package contains files required for developing software that makes use of libasound2, the ALSA library. . ALSA is the Advanced Linux Sound Architecture. Homepage: http://www.alsa-project.org/

    推荐阅读