Loading

[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 包永久不可能满足依赖

现在你已经抓到“病根”了 👍
按上面步骤做完,如果哪一步 有新的输出,直接贴,我可以继续“外科手术式”处理。

posted @ 2026-01-14 19:31  StarVik  阅读(5)  评论(0)    收藏  举报