[rosdep install]libaprutil1-dev依赖libldap2-dev可能会破坏软件包间的依赖关系
本解决方法来源于Chatgpt,并成功解决
报错信息
下列软件包有未满足的依赖关系:
libaprutil1-dev : 依赖: libldap2-dev
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
ERROR: the following rosdeps failed to install
apt: command [sudo -H apt-get install -y libaprutil1-dev] failed
✅ 现在的真实情况(结论先行)
你这台 Ubuntu 22.04 当前状态是:
1️⃣ jammy-updates 根本没启用 binary 源
你 grep 的结果只有这一行:
# deb-src http://cn.archive.ubuntu.com/ubuntu/ jammy-updates ...
注意:
👉 全部是 deb-src,而且还被注释掉了
👉 没有任何 deb http:// ... jammy-updates(binary)
所以:
-
你的系统 只能看到
jammy(2.5.11)jammy-security(2.5.16)
-
完全看不到
jammy-updates的 2.5.19 的 dev 包 -
但你的
libldap-2.5-0 = 2.5.19已经装上了
👉 这就是“半升级地狱”的来源
2️⃣ 为什么 apt 说 libldap2-dev 只有 2.5.16?
这是关键输出:
虚拟软件包 libldap2-dev 由下面的软件包提供:
libldap-dev 2.5.16+dfsg-0ubuntu0.22.04.2
说明:
libldap2-dev是个 virtual package- 实际包名是:
libldap-dev - 你当前能看到的 只有 security 仓库里的 2.5.16
- 看不到 jammy-updates 的 2.5.19
🎯 唯一正确的修复路线(官方 & 干净)
✅ 第一步:启用 jammy-updates(这是根因)
1️⃣ 编辑 sources.list
sudo nano /etc/apt/sources.list
确保 存在且未注释 下面这一行(非常重要):
deb http://cn.archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
如果你在国内,用清华源也行:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates main restricted universe multiverse
保存退出。
2️⃣ 更新 apt 索引
sudo apt update
然后确认:
apt-cache policy libldap-dev
你应该能看到类似:
libldap-dev:
候选:2.5.19+dfsg-0ubuntu0.22.04.1
👉 看到这一步,说明问题已经 80% 解决
✅ 第二步:让 libldap dev / runtime 版本彻底对齐
现在执行(不用指定版本了):
sudo apt install libldap-dev libldap-2.5-0
如果 apt 提示升级 → 同意
✅ 第三步:安装 libaprutil1-dev
sudo apt install libaprutil1-dev
✅ 第四步:重新跑 rosdep(收官)
rosdep install --from-paths src --ignore-src -y
🎉 到这里 必然成功
🧠 为什么这是“唯一正确解”?
因为:
- ❌ 降级 runtime(2.5.19 → 2.5.16)会破坏系统
- ❌ 强行 dpkg / force-depends 是定时炸弹
- ❌ rosdep 无法解决系统源问题
- ✅ 启用 jammy-updates 是 Ubuntu 官方设计路径
⚠️ 顺手提醒你一个隐藏雷(你已经踩了一半)
你这里有一条警告:
W: GPG 错误:https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu
NO_PUBKEY F42ED6FBAB17C654
👉 这会导致 以后 ros2 包“莫名其妙不升级”
修复命令(推荐你现在就做):
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
然后检查 ROS 源是否使用了 signed-by=(如果需要我可以帮你整理)
✅ 总结一句话
你的系统缺了 jammy-updates binary 源,导致 libldap runtime 与 dev 包永久不可能满足依赖
现在你已经抓到“病根”了 👍
按上面步骤做完,如果哪一步 有新的输出,直接贴,我可以继续“外科手术式”处理。

浙公网安备 33010602011771号