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

相关推荐
123过去4 小时前
wordlists使用教程
linux·网络·测试工具·安全
有毒的教程10 小时前
Ubuntu 虚拟机磁盘空间不足完整解决教程
linux·运维·ubuntu
geNE GENT11 小时前
Nginx WebSocket 长连接及数据容量配置
运维·websocket·nginx
小樱花的樱花12 小时前
C++ new和delete用法详解
linux·开发语言·c++
APIshop12 小时前
Java获取京东商品详情接口(item_get)实战指南
java·linux·数据库
Cx330❀12 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
薛定谔的悦12 小时前
储能系统(EMS)核心架构解析:充放电控制、防逆流、防过载与 PID 调节
linux·运维·架构
志栋智能13 小时前
超自动化运维的终极目标:让系统自治运行
运维·网络·人工智能·安全·自动化
3GPP仿真实验室13 小时前
【MATLAB源码】CSI-RS:测量链路
linux·网络·matlab