1. 问题背景与现象分析
在Ubuntu系统上编译安装Ceres Solver时,很多开发者会遇到关于absl和GTest的依赖报错问题。这个问题的典型表现是,当执行cmake ..命令时,控制台会输出类似"Could NOT find absl"或"GTest not found"的错误信息。
这类错误通常发生在以下两种场景:
- 开发者直接通过
apt-get install libceres-dev安装预编译版本时,系统自动处理了所有依赖关系 - 从源码编译安装时,系统缺少必要的依赖项或CMake无法正确找到这些依赖
问题的根源在于Ceres Solver作为非线性优化库,依赖于Google的几个基础库:
- absl (Abseil):Google的基础库集合,提供各种跨平台工具
- GTest (Google Test):Google的C++测试框架
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常见错误解决方案的局限性
网上常见的解决方案大致分为三类,但都存在明显缺陷:
2.1 手动安装缺失依赖
bash复制sudo apt-get install libgtest-dev libabsl-dev
这种方法看似直接,但实际存在两个问题:
- Ubuntu官方仓库中的版本可能不匹配Ceres所需版本
- 即使安装成功,CMake可能仍无法正确定位这些库的位置
2.2 手动编译安装依赖
bash复制git clone https://github.com/google/googletest.git
cd googletest
mkdir build && cd build
cmake .. && make && sudo make install
这种方法虽然能确保版本匹配,但:
- 操作繁琐,需要重复类似过程处理多个依赖
- 可能污染系统全局库环境
- 不同项目可能依赖不同版本,导致冲突
2.3 修改CMakeLists.txt强制跳过检查
cmake复制option(BUILD_TESTING "Build tests" OFF)
这种方法虽然能绕过错误,但:
- 失去了测试功能
- 可能掩盖更深层次的依赖问题
- 不适用于需要测试功能的开发场景
