找回密码
 立即注册
首页 业界区 业界 CMake构建学习笔记30-Ceres Solver库的构建

CMake构建学习笔记30-Ceres Solver库的构建

岑韬哎 2025-11-22 15:20:03
1 引言

Ceres Solver 是一个由 Google 开发的开源 C++ 库,用于求解大规模非线性最小二乘问题,广泛应用于计算机视觉、机器人和三维重建等领域。
2 构建

记得以前构建Ceres Solver经常失败,其中一个原因是因为 Google 系的 C/C++ 程序库很喜欢使用静态库,Google 的程序员认为静态库可以避免二进制兼容的问题。至于构建的性能问题,他们通过在专门的高性能机器上构建来解决。不过,像 Ceres Solver 这样的大型库需要的依赖库太多,它们不一定是静态库,动态库和静态库混合使用,构建时很容易出现找不到符号的问题。
笔者这里构建 Ceres Solver 使用的有依赖库有 eigen、gflags、glog、OpenBLAS 和 SuiteSparse。这里面大部分库的构建前面的文章《CMake构建学习笔记-目录》都介绍过,gflags、glog 构建也比较简单,使用本系列文章实现的自动化工具 BuildCppDependency 安装 Ceres Solver 的时候会自动进行安装。
在 Windows 平台下输入指令:
  1. ./BuildCppDependency.ps1 `
  2.   -Generator "Visual Studio 16 2019" `
  3.   -InstallDir "$env:GISBasic" `
  4.   -SymbolDir "$env:GISBasic/symbols" `
  5.   -Install ceres-solver
复制代码
在 Linux (Ubuntu) 平台下输入指令:
  1. ./build.sh -install ceres-solver -installdir "$GISBasic"
复制代码
还是展开看一下 Windows 下的构建脚本中的 CMake 构建参数:
  1. # ceres-solver.ps1
  2. param(   
  3.     [string]$Name = "ceres-solver-2.2.0",
  4.     [string]$SourceDir = "../Source",
  5.     [string]$Generator,
  6.     [string]$InstallDir,  
  7.     [string]$SymbolDir,  
  8.     [bool]$Force = $false,        # 是否强制重新构建
  9.     [bool]$Cleanup = $true        # 是否在构建完成后删除源码和构建目录
  10. )
  11. # 目标文件
  12. $DllPath = "$InstallDir/lib/ceres.lib"
  13. # 依赖库数组
  14. $Librarys = @("eigen", "gflags", "glog", "OpenBLAS", "SuiteSparse")  
  15. # 符号库文件
  16. $PdbFiles = @(
  17.     "lib/RelWithDebInfo/ceres.pdb"
  18.     "lib/RelWithDebInfo/ceres_cuda_kernels.pdb"
  19. )
  20. # 额外构建参数
  21. $CMakeCacheVariables = @{
  22.     BUILD_TESTING = "OFF"
  23.     BUILD_EXAMPLES = "OFF"
  24.     BUILD_SHARED_LIBS = "OFF"   
  25.     USE_CUDA = "ON"
  26. }
  27. . ./build-common.ps1 -Name $Name `
  28.     -SourceDir $SourceDir `
  29.     -InstallDir $InstallDir `
  30.     -SymbolDir $SymbolDir `
  31.     -Generator $Generator `
  32.     -TargetDll $DllPath `
  33.     -PdbFiles $PdbFiles `
  34.     -CMakeCacheVariables $CMakeCacheVariables `
  35.     -MultiConfig $false `
  36.     -Force $Force `
  37.     -Cleanup $Cleanup `
  38.     -Librarys $Librarys
复制代码
解释一下这几个 CMake 构建参数:

  • BUILD_TESTING = "OFF"&&BUILD_EXAMPLES = "OFF":一般含有TEST或者EXAMPLE的构建项都不是必须的,一般都可以去掉,减少构建时间和构建体积。
  • BUILD_SHARED_LIBS = "OFF":尝试过构建动态库,但是失败了,原因待查。这里关掉表示构建静态库。
  • USE_CUDA = "ON":如果没有安装 CUDA SDK 就可以关掉。
3 其他

系列文章:《CMake构建学习笔记-目录》
构建工具: Github地址,GitCode地址
二进制构建结果:Github地址,GitCode地址

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册