Ubuntu 22.04 解决 nvblox 编译依赖冲突:libgoogle-glog-dev 安装问题全记录

问题背景

在编译 nvblox 项目时,遇到 CMake 配置错误:

复制代码
CMake Error at cmake/FindGlog.cmake:103 (message):
  Failed to find glog - Could not find glog include directory

尝试通过 apt 安装 libgoogle-glog-dev 时,出现依赖冲突:

复制代码
The following packages have unmet dependencies:
 libgoogle-glog-dev : Depends: libunwind-dev or libunwind7-dev but it is not installable

问题原因分析

1. libunwind 版本冲突

在 Ubuntu 22.04 系统中,同时存在两个互斥的 libunwind 开发包:

  • libunwind-14-dev:由 LLVM/Clang 14 工具链引入
  • libunwind-dev:系统标准版本

这两个包提供了相同的文件,无法共存安装。

2. 冲突根源

LLVM 工具链中的 libunwind-14-dev 与系统标准的 libunwind-dev 包定义互斥,导致 libgoogle-glog-dev 无法安装。

解决方案实施

第一步:查看当前 libunwind 包状态

bash 复制代码
dpkg -l | grep libunwind

输出显示:

复制代码
ii  libunwind-14:amd64      1:14.0.0-1ubuntu1.1
ii  libunwind-14-dev:amd64  1:14.0.0-1ubuntu1.1
ii  libunwind8:amd64        1.3.2-2build2.1

第二步:移除冲突的 libunwind-14-dev

bash 复制代码
sudo apt remove libunwind-14-dev

系统提示将同时移除:

  • libc++-14-dev
  • libc++-dev

确认移除操作(y),释放约 9,303 kB 磁盘空间。

第三步:安装标准 libunwind-dev

bash 复制代码
sudo apt install libunwind-dev

成功安装后,输出:

复制代码
Setting up libunwind-dev:amd64 (1.3.2-2build2.1)

第四步:安装 libgoogle-glog-dev

bash 复制代码
sudo apt install libgoogle-glog-dev

自动安装依赖包:

  • libgflags2.2
  • libgflags-dev
  • libgoogle-glog0v5

安装成功!

完整解决方案总结

解决步骤

  1. 移除冲突包

    bash 复制代码
    sudo apt remove libunwind-14-dev
  2. 安装标准包

    bash 复制代码
    sudo apt install libunwind-dev libgoogle-glog-dev

验证安装

bash 复制代码
# 检查 glog 头文件
ls /usr/include/glog/logging.h

# 检查库文件
ls /usr/lib/x86_64-linux-gnu/libglog.so

# 重新配置 nvblox
cd ~/workspace/3rdparty/nvblox/nvblox/build
cmake .. -DPRE_CXX11_ABI_LINKABLE=ON -DBUILD_TESTING=OFF

替代方案(如果不想移除 LLVM 开发包)

方案一:从源码编译 glog

bash 复制代码
git clone https://github.com/google/glog.git
cd glog
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install

方案二:使用 Conda 安装(隔离环境)

bash 复制代码
conda activate curobo
conda install -c conda-forge glog

注意事项

  1. 移除 libunwind-14-dev 的影响

    • 会同时移除 libc++-devlibc++-14-dev
    • 如果项目依赖 LLVM 的 C++ 标准库,需要注意兼容性
  2. 系统环境

    • 本文基于 Ubuntu 22.04 (Jammy)
    • CUDA 版本:12.8
    • Conda 环境:curobo
  3. 后续优化

    bash 复制代码
    # 清理不再需要的依赖
    sudo apt autoremove

总结

通过移除冲突的 libunwind-14-dev 并安装系统标准的 libunwind-dev,成功解决了 libgoogle-glog-dev 的安装问题。这是一个典型的 Ubuntu 包管理依赖冲突案例,理解包之间的依赖关系是解决问题的关键。

对于使用 LLVM 工具链的开发环境,需要在项目需求之间做出权衡:要么接受移除 LLVM 相关包,要么选择源码编译或 Conda 安装等替代方案。

相关推荐
ltl2 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??2 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
Shell运维手记3 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
朴马丁3 小时前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
Elastic 中国社区官方博客4 小时前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
测试运维日常笔记4 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器
喜欢的名字被抢了5 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
雾时之林5 小时前
Linux----cron定时服务
linux·运维·服务器
壹玖玖肆6 小时前
医院后勤智能运维系统实用性评测
运维
sunly_6 小时前
TypeScript:3、类型声明与类型推断
javascript·ubuntu·typescript