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

相关推荐
大耳朵-小飞象10 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技11 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++11 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
生活爱好者!14 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
壮哥_icon16 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi16 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎