当前位置: 首页 > news >正文

CMake构建学习笔记29-SuiteSparse库的构建

1 介绍

在上一篇文章《CMake构建学习笔记26-OpenBLAS库的构建》中介绍的OpenBLAS是用来解决稠密矩阵相关问题的,例如数值优化中的最小二乘问题。但是如果问题模型中的已知参数太多,就会导致求解的矩阵中存在大量的零值,直接使用常规的稠密矩阵方法求解不仅速度慢,对内存资源的消耗也是一个问题。这种存在大量的零值的矩阵就是稀疏矩阵,会采用一些专门的方法优化这一类问题的求解。

SuiteSparse 就是一个用于高效求解稀疏矩阵相关的问题的开源软件包集合。它由 Timothy A. Davis 教授开发和维护,被广泛应用于科学计算、工程仿真、图论、机器学习等领域。

2 构建

SuiteSparse需要3个依赖库:OpenBLAS、gmp 和 mpfr ,正好这三个依赖库我们在前面的文章《CMake构建学习笔记26-OpenBLAS库的构建》和《CMake构建学习笔记28-gmp&mpfr库的构建》中都介绍过,这里就不再赘叙了。

还是使用本系列文章(《CMake构建学习笔记-目录》)实现的自动化工具 BuildCppDependency 来构建 SuiteSparse。在 Windows 平台下输入指令:

./BuildCppDependency.ps1 `-Generator "Visual Studio 16 2019" `-InstallDir "$env:GISBasic" `-SymbolDir "$env:GISBasic/symbols" `-Install SuiteSparse

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

./build.sh -install SuiteSparse -installdir "$GISBasic"

进一步看一下 Windows 下的构建脚本,主要是为了看一下 CMake 构建参数:

# SuiteSparse.ps1
param(    [string]$Name = "SuiteSparse-7.11.0",[string]$SourceDir = "../Source",[string]$Generator,[string]$InstallDir,  [string]$SymbolDir,  [bool]$Force = $false,        # 是否强制重新构建[bool]$Cleanup = $true        # 是否在构建完成后删除源码和构建目录
)# 目标文件
$DllPath = "$InstallDir/bin/umfpack.dll"# 依赖库数组
$Librarys = @("OpenBLAS", "gmp", "mpfr")  # 符号库文件
$PdbFiles = @("SuiteSparse_config/RelWithDebInfo/suitesparseconfig.pdb""Mongoose/RelWithDebInfo/suitesparse_mongoose.pdb""AMD/RelWithDebInfo/amd.pdb""BTF/RelWithDebInfo/btf.pdb""CAMD/RelWithDebInfo/camd.pdb""CCOLAMD/RelWithDebInfo/ccolamd.pdb""CHOLMOD/RelWithDebInfo/cholmod.pdb""COLAMD/RelWithDebInfo/colamd.pdb""CXSparse/RelWithDebInfo/cxsparse.pdb""GraphBLAS/RelWithDebInfo/graphblas.pdb"    "KLU/RelWithDebInfo/klu.pdb""LAGraph/dlls/RelWithDebInfo/lagraph.pdb""LAGraph/dlls/RelWithDebInfo/lagraphx.pdb""LDL/RelWithDebInfo/ldl.pdb""ParU/RelWithDebInfo/paru.pdb""RBio/RelWithDebInfo/rbio.pdb""SPEX/RelWithDebInfo/spex.pdb""SPEX/RelWithDebInfo/spexpython.pdb""SPQR/RelWithDebInfo/spqr.pdb""UMFPACK/RelWithDebInfo/umfpack.pdb"
) # 额外构建参数
$CMakeCacheVariables = @{SUITESPARSE_REQUIRE_BLAS = "ON"SUITESPARSE_USE_64BIT_BLAS = "ON"   BUILD_TESTING = "OFF"BUILD_STATIC_LIBS = "OFF"BUILD_SHARED_LIBS = "ON"SUITESPARSE_USE_FORTRAN = "ON"SUITESPARSE_C_TO_FORTRAN = "(name,NAME) name##_"
}. ./build-common.ps1 -Name $Name `-SourceDir $SourceDir `-InstallDir $InstallDir `-SymbolDir $SymbolDir `-Generator $Generator `-TargetDll $DllPath `-PdbFiles $PdbFiles `-CMakeCacheVariables $CMakeCacheVariables `-MultiConfig $true `-Force $Force `-Cleanup $Cleanup `-Librarys $Librarys

这几个构建参数比较关键,否者容易构建失败,这里就详细说明一下:

  1. SUITESPARSE_REQUIRE_BLAS = "ON":强制要求在构建 SuiteSparse 时链接 BLAS/LAPACK 库。
  2. SUITESPARSE_USE_64BIT_BLAS = "ON":启用对 64 位整数索引的 BLAS/LAPACK 接口 的支持(也称为 ILP64 模式)。默认的 BLAS/LAPACK 使用 32 位整数,当处理超大规模稀疏矩阵时,链接的 OpenBLAS 必须编译为 ILP64 版本,否则会出现链接错误或运行时崩溃。
  3. BUILD_TESTING = "OFF":禁用测试程序的构建。
  4. BUILD_STATIC_LIBS = "OFF"/BUILD_SHARED_LIBS = "ON":只构建动态链接库,不构建静态库。
  5. SUITESPARSE_USE_FORTRAN = "ON":使用传统的 Fortran 风格 BLAS/LAPACK 接口(如函数名为 dgemm_, dpotrf_ 等)来链接外部库。
  6. SUITESPARSE_C_TO_FORTRAN = "(name,NAME) name##_":定义 C 函数如何调用 Fortran 子程序的命名转换规则。

尽管在构建 OpenBLAS 的时候,没有使用 Fortran 来构建,但是处于兼容性,OpenBLAS还是会提供 Fortran 接口。这里设置了使用传统的 Fortran 风格来调用 BLAS/LAPACK 接口,但是 SuiteSparse 本身是 C 实现的,因此调用 Fortran 接口需要对接口命名进行转换。

3. 其他

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

http://www.jsqmd.com/news/47530/

相关文章:

  • CMake构建学习笔记30-Ceres Solver库的构建
  • 计算机操作系统 - 设备管理 - 指南
  • 2025年11月超高速称重机,动静态称重机,瓶装线专用称重机厂家解析:定制化能力与案例参考
  • curl 命令使用笔记
  • 2025年11月高精度称重机,动静态称重机,软管称重机厂家精选:合规认证与产能数据透视
  • 2025年口碑好的电厂清淤机器人厂家最新用户好评榜
  • 2025年靠谱的极低压抗污染反渗透膜厂家最新TOP排行榜
  • 2025年比较好的无菌室净化门行业内知名厂家排行榜
  • 2025年11月留学生回国求职机构推荐榜单:权威机构列表与选择指南
  • 2025年热门的四川岩棉板厂家最新权威推荐排行榜
  • 2025年11月留学生回国求职机构推荐:五大权威机构榜单与选择指南
  • 2025年评价高的快速离心浓缩干燥器TOP品牌厂家排行榜
  • 2025年质量好的提花纸布用户好评厂家排行
  • 2025年比较好的载带成型机用户好评厂家排行
  • 2025年比较好的组合式恒温 振荡培养箱最新TOP品牌厂家排行
  • 2025年靠谱的马口铁罐厂家实力及用户口碑排行榜
  • 2025年热门的清淤机器人厂家最新权威推荐排行榜
  • 2025年靠谱的自动巡检机器人厂家最新权威实力榜
  • 2025年11月留学生求职机构市场报告:从资源覆盖到成果交付的全面解析
  • AS32S601ZIT2型MCU在人防工程报警及控制设备中的应用与国产化优势 - 指南
  • 2025年可靠的小流量齿轮泵TOP品牌厂家排行榜
  • 2025年有实力催化剂拟薄水铝石行业内知名厂家排行榜
  • 2025年专业的输送机高评价厂家推荐榜
  • 2025年诚信的镁制硅晶防火风管厂家推荐及选购指南
  • 2025年靠谱的试验机行业内知名厂家排行榜
  • 2025年评价高的浙江农机链条厂家最新TOP排行榜
  • 2025年11月留学生找实习机构推荐:权威市场报告解读与口碑机构列表
  • uvx命令介绍(uv命令核心命令之一,用于隔离环境敏捷运行Python命令行设备或脚本,无需永久安装依赖)结合了pipx和npx功能,更快、隔离更强,适合临时任务或需要严格环境隔离的场景;uv安装uv
  • 2025年优质的广州食堂洗碗机高评价厂家推荐榜
  • 2025年质量好的重型卡车天窗优质厂家推荐榜单