Ubuntu20.04下Ceres1.14的安装与验证:从依赖配置到测试运行

张开发
2026/4/4 7:11:23 15 分钟阅读
Ubuntu20.04下Ceres1.14的安装与验证:从依赖配置到测试运行
1. 环境准备与依赖安装在Ubuntu 20.04上安装Ceres Solver 1.14之前我们需要先配置好基础环境。这个环节就像盖房子前打地基缺一不可。我遇到过不少因为依赖缺失导致的编译失败案例所以特别整理了这份详细清单。首先更新软件源索引这个操作相当于刷新本地软件目录sudo apt update sudo apt upgrade -y接下来安装核心数学计算库这些是Ceres进行非线性优化的基础组件sudo apt install -y liblapack-dev libsuitesparse-dev libcxsparse3.1.4 \ libgflags-dev libgoogle-glog-dev libgtest-dev这里有个容易踩坑的地方不同Ubuntu版本对应的libcxsparse版本号可能不同。我在20.04上实测发现3.1.4才是正确的版本如果按老教程安装3.1.2会导致后续编译报错。安装完成后建议用ls /usr/lib/x86_64-linux-gnu/检查是否存在libcxsparse.so文件。2. 源码获取与编译配置现在进入正式的安装环节。我推荐从源码编译安装而不是直接apt安装这样可以确保获得1.14特定版本也方便后续调试。首先下载官方源码包建议用国内镜像加速wget https://ceres-solver.org/ceres-solver-1.14.0.tar.gz tar xvf ceres-solver-1.14.0.tar.gz cd ceres-solver-1.14.0创建编译目录是Cmake项目的标准做法可以保持源码目录干净mkdir build cd build关键配置步骤来了这里有几个优化参数值得注意cmake .. -DCMAKE_BUILD_TYPERelease \ -DBUILD_EXAMPLESOFF \ -DBUILD_TESTINGOFF解释下这几个参数BUILD_TYPERelease开启编译器优化关闭示例和测试编译可以加快速度如果要用Python接口需要额外加-DBUILD_PYTHON_BINDINGSON3. 编译与安装过程编译阶段最耗时间这里有几个实用技巧make -j$(nproc)-j$(nproc)会自动检测CPU核心数并行编译我的8核机器上编译时间从15分钟缩短到3分钟。编译过程中如果出现内存不足可以适当减少并行数比如-j4。安装到系统目录需要管理员权限sudo make install安装完成后Ceres会被默认安装到/usr/local/下。可以通过以下命令验证ls /usr/local/include/ceres ls /usr/local/lib/libceres.a4. 验证安装的正确性安装完成不是终点验证能正常工作才最关键。我准备了一个最小测试案例这个例子求解一个简单的最优化问题找到使10-x0成立的x值。创建项目目录结构ceres_test/ ├── CMakeLists.txt └── ceres_example.cppCMakeLists.txt内容如下注意版本要求cmake_minimum_required(VERSION 3.10) project(ceres_test) find_package(Ceres REQUIRED) include_directories(${CERES_INCLUDE_DIRS}) add_executable(ceres_test ceres_example.cpp) target_link_libraries(ceres_test ${CERES_LIBRARIES})测试代码ceres_example.cpp直接使用官网示例但增加了更多输出信息#include iostream #include ceres/ceres.h class CostFunctor { public: template typename T bool operator()(const T* const x, T* residual) const { residual[0] T(10.0) - x[0]; return true; } }; int main() { double x 0.5; ceres::Problem problem; ceres::CostFunction* cost_function new ceres::AutoDiffCostFunctionCostFunctor, 1, 1(new CostFunctor); problem.AddResidualBlock(cost_function, nullptr, x); ceres::Solver::Options options; options.minimizer_progress_to_stdout true; ceres::Solver::Summary summary; std::cout Initial x: x std::endl; Solve(options, problem, summary); std::cout summary.BriefReport() \n; std::cout Final x: x std::endl; return 0; }编译和运行测试mkdir build cd build cmake .. make ./ceres_test成功运行的输出应该显示优化过程最终x值会接近10。如果看到类似下面的输出说明安装成功iter cost cost_change |gradient| |step| tr_ratio tr_radius ls_iter iter_time total_time 0 4.512500e01 0.00e00 9.50e00 0.00e00 0.00e00 1.00e04 0 5.06e-05 1.67e-04 1 4.511598e-07 4.51e01 9.50e-04 9.50e00 1.00e00 3.00e04 1 1.10e-04 3.13e-04 2 5.012552e-16 4.51e-07 3.17e-08 9.50e-04 1.00e00 9.00e04 1 4.03e-05 3.64e-04 Final x: 105. 常见问题排查在实际安装过程中可能会遇到各种问题这里分享几个典型case的解决方案问题1找不到SuiteSparseCMake Error at CMakeLists.txt:xxx (find_package): Could not find a package configuration file provided by SuiteSparse...解决方法安装缺失的依赖sudo apt install libsuitesparse-dev问题2GLIBCXX版本不兼容/usr/lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.26 not found这是因为gcc版本太旧需要更新sudo apt install gcc-9 g-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9问题3内存不足导致编译失败在内存较小的机器上编译可能出现编译器被kill的情况。解决方法make -j2 # 减少并行编译任务数6. 性能优化建议要让Ceres发挥最佳性能有几个配置技巧值得注意线性求解器选择DENSE_QR适合小规模问题参数几百SPARSE_NORMAL_CHOLESKY大规模稀疏问题首选CGNR内存受限时的选择多线程加速 在CMake配置时开启OpenMPcmake .. -DOPENMPON内存管理 对于超大问题可以设置options.num_threads 4; options.linear_solver_ordering nullptr;7. 卸载与版本管理如果需要卸载Ceres执行以下命令即可sudo rm -rf /usr/local/lib/cmake/Ceres sudo rm -rf /usr/local/include/ceres sudo rm -f /usr/local/lib/libceres*对于多版本管理需求我推荐使用checkinstall工具生成deb包sudo apt install checkinstall cd build sudo checkinstall这样可以通过dpkg来管理安装和卸载还能保留安装记录。

更多文章