1问题
由于各种各样的原因,在我按照官方教程http://wiki.ros.org/cn/indigo/Installation/Ubuntu操作过程中,出现依赖项问题:ros-indigo-desktop-full :Unable to correct problems, you have held broken package,无法继续进行。
2 解决方 法
2.1 aptitude的介绍
aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。以下是笔者总结的一些常用 aptitude命令,仅供参考。
命令 作用
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
当然,你也可以在文本界面模式中使用 aptitude。
aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。以下是笔者总结的一些常用 aptitude命令,仅供参考。
命令 作用
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
当然,你也可以在文本界面模式中使用 aptitude。
2.2 实际操作
sudo aptitude install ros-indigo-desktop-full
在ROS安装的过程中,当运行sudo apt-get install ros-***后,我们常常会遇到类似下面的错误:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
ros-***-desktop-full : Depends: ros-***-mobile but it is not going to be installed
Depends: ros-***-perception but it is not going to be installed
Depends: ros-***-simulators but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
解决方法主要有以下两种:
1. 每次安装第一个缺失的依赖包
如: sudo apt-get install ros-***-mobile ,运行该命令后可能会出现新的依赖包缺失问题,再次安装新的第一个缺失的依赖包。
如此这般,直到安装好所有的依赖包,再次执行命令
sudo apt-get install ros-***;
2. 在第一种方法解决不了的情况下使用:
sudo aptitude install ros-*** 代替 sudo apt-get install ros-***;
对于前面的提示Accept this solution? [Y/n/q/?],选择n
直到出现类似这样的提示时,选择Y:
The following actions will resolve these dependencies:
Install the following packages:
1) ps-engine [5.0.3.3-3+precise1 (precise)]
Accept this solution? [Y/n/q/?]