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++-dev 和 libc++-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 安装等替代方案。

相关推荐
程序员-Benothing4 分钟前
Linux CPU性能分析:top、mpstat、pidstat、perf实战
linux·运维·服务器
William.csj6 分钟前
Bitvise SSH Client——配置跳板机:通过中转服务器连接内网服务器
运维·服务器·ssh
小诗懂技术10 分钟前
Linux设备驱动并发控制总结_CSDN
linux·运维·服务器
colinu11 分钟前
Docker 容器端口未发布问题快速排查文档
运维·docker·容器
迪康coolmu19 分钟前
迪康Defender网络准入控制系统落地实战:部署、配置与问题排查记录
运维·开发语言·网络·经验分享·php
Dovis(誓平步青云)19 分钟前
一年1956亿行:智能电表场景下的时序数据存储实践
运维·前端·自动化·音视频·prometheus
北风toto24 分钟前
银河麒麟 V10 内网 YUM 源修复实战教程(U盘中转版)
linux·服务器
小白鸽i29 分钟前
【linux】麒麟桌面版安装人大金仓V8
linux·运维
Ruiery34 分钟前
Linux 6.6内核内存管理深度解析(三):页表与缺页处理 — 虚拟地址怎么按需映射到物理页
linux·运维·服务器
研发小能35 分钟前
DevOps 流水线怎么选?自研、开源拼装还是企业级平台
运维·开源·devops·嘉为蓝鲸