运行Ceres Solver教程代码遇SUITE_SPARSE未启用报错如何解决
问题原因
报错核心原因是你当前使用的Ceres Solver编译时没有开启SuiteSparse稀疏线性代数库的支持,而Ceres默认配置优先调用
SPARSE_NORMAL_CHOLESKY稀疏求解器,触发了兼容性报错。
解决方案
方案1:临时修改求解器配置(无需重编Ceres,快速解决小体量问题)
你当前运行的是单变量极小化示例,用稠密求解器完全满足需求,仅需要修改代码中求解器配置即可,修改后的代码片段如下:
Solver::Options options; options.linear_solver_type = ceres::DENSE_QR; // 改用稠密QR求解器 options.minimizer_progress_to_stdout = true; Solver::Summary summary; Solve(options, &problem, &summary);
修改后重新编译你的代码即可正常运行。
方案2:重新编译带SuiteSparse支持的Ceres Solver(适合长期使用稀疏求解场景)
- 第一步:编译安装SuiteSparse库,确保其编译参数和你当前Ceres使用的编译参数完全一致,包括编译器版本、架构(x86/x64)、运行库类型(MD/MT),编译完成后记录好SuiteSparse的头文件、库文件、可执行文件的安装路径。
- 第二步:重新运行Ceres Solver的CMake配置,勾选
SUITESPARSE_ENABLE选项,手动指定CMake找不到的SuiteSparse相关头文件、库文件路径。 - 第三步:确认CMake配置输出日志中
SuiteSparse support项显示为Yes,没有缺失依赖项的提示。 - 第四步:生成Ceres的编译工程,重新编译并安装,替换原有环境中的Ceres头文件和库文件。
- 第五步:重新编译你的业务代码,链接新生成的Ceres库即可正常调用稀疏求解器。
内容的提问来源于stack exchange,提问作者Leon Yang
相关产品推荐
相关产品推荐

