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

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 平台下输入指令:

powershell 复制代码
./BuildCppDependency.ps1 `
  -Generator "Visual Studio 16 2019" `
  -InstallDir "$env:GISBasic" `
  -SymbolDir "$env:GISBasic/symbols" `
  -Install ceres-solver

在 Linux (Ubuntu) 平台下输入指令:

bash 复制代码
./build.sh -install ceres-solver -installdir "$GISBasic"

还是展开看一下 Windows 下的构建脚本中的 CMake 构建参数:

powershell 复制代码
# ceres-solver.ps1
param(    
    [string]$Name = "ceres-solver-2.2.0",
    [string]$SourceDir = "../Source",
    [string]$Generator,
    [string]$InstallDir,  
    [string]$SymbolDir,  
    [bool]$Force = $false,        # 是否强制重新构建
    [bool]$Cleanup = $true        # 是否在构建完成后删除源码和构建目录
)

# 目标文件
$DllPath = "$InstallDir/lib/ceres.lib"

# 依赖库数组
$Librarys = @("eigen", "gflags", "glog", "OpenBLAS", "SuiteSparse")  

# 符号库文件
$PdbFiles = @(
    "lib/RelWithDebInfo/ceres.pdb"
    "lib/RelWithDebInfo/ceres_cuda_kernels.pdb"
) 

# 额外构建参数
$CMakeCacheVariables = @{
    BUILD_TESTING = "OFF"
    BUILD_EXAMPLES = "OFF"
    BUILD_SHARED_LIBS = "OFF"    
    USE_CUDA = "ON"
}

. ./build-common.ps1 -Name $Name `
    -SourceDir $SourceDir `
    -InstallDir $InstallDir `
    -SymbolDir $SymbolDir `
    -Generator $Generator `
    -TargetDll $DllPath `
    -PdbFiles $PdbFiles `
    -CMakeCacheVariables $CMakeCacheVariables `
    -MultiConfig $false `
    -Force $Force `
    -Cleanup $Cleanup `
    -Librarys $Librarys

解释一下这几个 CMake 构建参数:

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

3 其他

系列文章:《CMake构建学习笔记-目录》

构建工具: Github地址GitCode地址

二进制构建结果:Github地址GitCode地址

相关推荐
handler011 天前
【Linux】动态库、静态库使用与原理
linux·运维·服务器·c++·c·动态库·静态库
乱七八糟的屋子1 天前
NLopt 超详细实战教程(C++版)算法选型|多目标优化|批量寻优|动态约束|闭环仿真控制
数学建模·非线性优化·nlopt·多目标优化·机器人算法·工业仿真·c++优化
雾里看山5 天前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
ysu_03146 天前
工具链通关02-CMake进阶超100个文件
cmake
十五年专注C++开发7 天前
CMake基础:BUILD_INTERFACE 与 INSTALL_INTERFACE 完全解析
c++·cmake·build_interface
羑悻的小杀马特10 天前
百度ASR+BRPC+ETCD高并发高可用架构搭建,C++客户端API封装+语音识别子服务注册发现+全链路测试调优终极指南!
架构·sdk·etcd·cmake·百度智能云·brpc·语音识别子服务
_YouziTech_10 天前
VS Code环境下LVGL模拟器的配置与运行
visualstudio·mingw·cmake·lvgl·vs code·模拟器·sdl2
用户39796786111613 天前
CMake-构建目标与属性
cmake
用户39796786111616 天前
CMake常用指令-string
cmake
我不会插花弄玉23 天前
8.库制作与原理【由浅入深-Linux】
linux·动态库·静态库