VS2015+windows10编译配置Ceres库

2023-10-20 19:59

本文主要是介绍VS2015+windows10编译配置Ceres库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、准备工作:软件下载
  • 二、实现过程
  • 三、实现效果
  • 参考资料

一、准备工作:软件下载

1、cmake:是一种跨平台的编译工具,它可以应用于Windows、Linux等系统
2、VS2015:这就不用怎么介绍了,使用很广泛的一个软件。
3、Eigen:一个矩阵库,Ceres官方建议下载3.3版本及之上的Eigen包。
4、glog:在Ceres中,glog被广泛用于记录关于内存分配、解决过程中不同部分所消耗的时间、内部错误情况等详细信息。
5、gflags:一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags还支持从环境变量、配置文件读取参数,通常需要依赖于glog。
6、Ceres:一个开源的c++库,用于建模和解决大型、复杂的优化问题。它可用于求解有界约束的非线性最小二乘问题和一般的无约束优化问题。它是一个成熟的、功能丰富的和性能良好的库,自2010年以来一直在谷歌上用于生产。由于这里我使用的是VS2015,所以Ceres版本选择了V1.14.0;若是VS2019或VS2022,可以下载最新的版本。
上述的相关包的源代码均可以在GitHub中进行下载。

注:由于以前SuiteSparse在Windows上是不可用的,所以VS2015并不需要编译SuiteSparse库,最近该库已经支持了Windows系统,不过只有VS2019和VS2022支持对该库的调用。

二、实现过程

其中的Eigen、glog以及gflags库,均是正常的cmake操作,指定源目录和构建目录,点击configure和generate即可。之后在各个项目中进行编译、安装。

在上述的库全部都编译安装好了之后,就可以编译Ceres了,如下所示:

1、指定源目录和构建目录。

在这里插入图片描述

2、对CMake进行如下设置。

在这里插入图片描述

Eigen_Dir也需要指定相关的路径"_"。

在这里插入图片描述

在这里插入图片描述

这里修改一下Ceres的安装路径,方便后续的使用。

在这里插入图片描述

3、之后点击configure与generate生成VS项目。
4、对Ceres进行编译与安装。

在这里插入图片描述

在这里插入图片描述

最终的效果:

在这里插入图片描述

5、最后,添加相关的环境变量,方便后面程序的调用。

在这里插入图片描述

三、实现效果

添加一个Ceres示例:

#include<iostream>
#include<ceres/ceres.h>using namespace std;
using namespace ceres;struct CostFunctor {template <typename T>bool operator()(const T* const x, T* residual) const {residual[0] = 10.0 - x[0];return true;}
};int main(int argc, char** argv) {google::InitGoogleLogging(argv[0]);// The variable to solve for with its initial value.double initial_x = 5.0;double x = initial_x;// Build the problem.Problem problem;// Set up the only cost function (also known as residual). This uses// auto-differentiation to obtain the derivative (jacobian).CostFunction* cost_function =new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);problem.AddResidualBlock(cost_function, nullptr, &x);// Run the solver!Solver::Options options;options.linear_solver_type = ceres::DENSE_QR;options.minimizer_progress_to_stdout = true;Solver::Summary summary;Solve(options, &problem, &summary);std::cout << summary.BriefReport() << "\n";std::cout << "x : " << initial_x<< " -> " << x << "\n";system("pause");return 0;
}

在这里插入图片描述

参考资料

[1]http://www.javashuo.com/article/p-hgyfkjkj-nw.html

这篇关于VS2015+windows10编译配置Ceres库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249397

相关文章

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一