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

相关推荐
上学的小垃圾28 分钟前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
一直C2 小时前
Linux网络编程|HTTP协议详解(报文、请求方法、状态码)
linux·http·wireshark·vim·visual studio
爱喝水的鱼丶2 小时前
SAP-ABAP:ABAP 用户出口开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·出口
博、、3 小时前
从零构建智慧场馆解决方案:架构设计与开发实践
大数据·运维
敢敢是只喵i3 小时前
给现有业务系统接 AI 助手,入口怎么选?网页聊天、自动化任务与本地 Agent 对比
运维·人工智能·ai·开源·自动化·安全架构
章老师说4 小时前
BFE v1.8.6 正式发布:AI 网关计费精细化、Claude 协议与会话亲和性升级
运维·人工智能·ai·负载均衡·ai-native
Brilliantwxx4 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
欧米欧5 小时前
Linux基础指令上
linux·运维·服务器
爱喝水的鱼丶5 小时前
SAP-ABAP:BAdI 上下文数据获取与交互:标准数据读取与修改逻辑实现
运维·性能优化·sap·abap·增强·经验交流·badi
ARM|X86+FPGA工业主板厂家6 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人