windows下编译、配置ceres库(保姆级教程)

2023-11-05


前言

ceres 库是谷歌开发的基于C++的优化库,
本文主要记录ceres库在windows下的编译以及安装配置
备注: 如果各位懒得编译请支持下 (编译好的ceres库):https://download.csdn.net/download/qq_40957243/80429292

一、cmake安装

cmake下载网址:cmake官网
安装文件
请根据自己的电脑配置选择安装文件,我是64位的电脑,安装文件如上;

具体的cmake安装可参考cmake安装教程

二、ceres 依赖库的下载

2.1.依赖库的下载

  • Eigen: https://gitlab.com/libeigen/eigen/-/releases
  • ceres: https://github.com/ceres-solver/ceres-solver
  • gflags: https://github.com/gflags/gflags
  • glog: https://github.com/google/glog
  • suitesparse: https://github.com/jlblancoc/suitesparse-metis-for-windows/releases
    下载完成–>解压–>

在这里插入图片描述

2.2.编译前准备工作

2.2.1.创建vs工程的输出文件夹

  • 任选一个位置创建3Dparty_VS文件夹,以此在该文件夹下创建各个编译输出文件夹,如下:
    在这里插入图片描述

2.2.2.创建编译库的输出文件夹

同样创建编译库的输出文件,如下
在这里插入图片描述

2.3.编译Eigen库

  • 打开cmake,分别输入源文件路径输出路径,其次进行config配置,具体配置和输入如下:
    在这里插入图片描述
  • config 配置如下
    根据自己安装的vs 选择(本人安装的是vs2019)在这里插入图片描述
  • configure 配置如下
    BUILD_TESTING: 取消勾选;
    CMAKE_INSTALL_PREFIX: 选择库的输出路径(2.2.2 创建的文件夹)

点击Generate: 生成VS工程,在/Eigen_VS_build/文件夹下
在这里插入图片描述
cmake基本流程:
输入源文件路径-》输出VS工程路径-》Configure-》Generate;其他库的编译均按照此流程

2.3.1.编译Eigen3

  • 利用vs2019 打开Eigen3.sln,分别以DEBUG和RELEASE 模式下生成INSTALL工程;生成后便可以看到Eigenlib下的库目录
    在这里插入图片描述

2.4.编译gflags

cmake编译gflags 类似Eigen,输入gflags路径-》输出VS工程路径-》Configure-》Generate;

配置选项:

  1. CMAKE_INSTALL_PREFIX :输出路径(2.2.2中创建的文件夹)
    在这里插入图片描述
    生成库文件
    打开gflags.sln 分别以DEBUG和RELEASE 模式生成 ALL_BUILD和INSTALL

2.5.编译glog

cmake编译glog类似Eigen,输入gflags路径-》输出VS工程路径-》Configure-》Generate;

配置选项
CMAKE_INSTALL_PREFIX :输出路径
在这里插入图片描述
生成库文件
打开glog.sln 分别以DEBUG和RELEASE 模式生成 ALL_BUILD和INSTALL

2.6.编译SuiteSparse

cmake编译suiteSparse类似Eigen,输入SuiteSparse 路径-》输出VS工程路径-》Configure-》Generate;

2.6.1. 生成静态库文件

先生成静态库文件,下一步生成动态库文件
配置文件
在这里插入图片描述
生成库文件
打开SuiteSparse.sln 分别以DEBUG和RELEASE 模式生成 ALL_BUILD和INSTALL

2.6.2.生成动态库文件

生成静态库文件后,重新配置cmake,生成动态库文件
配置选项
重新选中 SHARED
在这里插入图片描述
生成库文件
打开SuiteSparse.sln 分别以DEBUG和RELEASE 模式生成 ALL_BUILD和INSTALL

2.7.编译Ceres

cmake编译ceers类似Eigen,输入ceres路径-》输出VS工程路径-》Configure-》Generate;
配置文件
编译ceres 需要增加(add entry)一些选项如下:
配置过程中注意第三方库的依赖路径,注意配置选项每条都对上

  • BLAS_LIBRARIES(FILEPATH):E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/lib64/lapack_blas_windows/libblas.lib
  • LAPACK_LIBRARIES(FILEPATH)
    E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/lib64/lapack_blas_windows/liblapack.lib
  • GLOG(BOOL):选中打勾
  • SUITESPARSE_CHECK_INCLUDE_DIRS(PATH):E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/include
  • SUITESPARSE_CHECK_LIBRARY_DIRS(PATH):E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/lib64
    在这里插入图片描述

在这里插入图片描述
生成库文件
打开ceres.sln 分别以DEBUG和RELEASE 模式生成 ALL_BUILD和INSTALL

三、测试ceres库文件

3.1.获取所有头文件和库文件

创建ceres/文件夹,分别在文件夹下创建include和library两个文件夹
在2.2.2创建的*lib文件夹下,分别复制库文件,进行以下操作,3DpartyLib是生成的库文件路径

  • 复制E:\3Dparty\Ceres\3DpartyLib\CeresLib\include路径下的ceres文件夹至E:\3Dparty\Ceres\3DpartyLib\Ceres\Include
  • 复制E:\3Dparty\Ceres\3DpartyLib\glogLib\include路径下的glog文件夹至E:\3Dparty\Ceres\3DpartyLib\Ceres\Include
  • 复制E:\3Dparty\Ceres\3DpartyLib\gflagLib\include路径下的gflag文件夹至E:\3Dparty\Ceres\3DpartyLib\Ceres\Include
  • 复制E:\3Dparty\Ceres\3DpartyLib\EigenLib\include\eigen3路径下Eigen文件夹至E:\3Dparty\Ceres\3DpartyLib\Ceres\Include\ceres

    依次分别复制头文件,静态库文件,动态库文件如下:
    在这里插入图片描述

3.2.helloworld测试

3.2.1.创建vs工程,添加ceres源代码中example文件夹下的helloworld.cc 文件;

在这里插入图片描述

3.2.2.添加包含目录和库目录:

在这里插入图片描述

3.2.3.引入静态库

在这里插入图片描述

3.2.4.编译踩坑

  • 问题1:POSIX name for this item
    在这里插入图片描述
    解决方案
    预处理器中增加宏定义:_CRT_NONSTDC_NO_DEPRECATE

  • 问题2:
    错误 C1189 #error: ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail. testHelloworld E:\3Dparty\Ceres\3DpartyLib\Ceres\Include\glog\log_severity.h 66
    解决方案
    预处理器中增加宏定义:GLOG_NO_ABBREVIATED_SEVERITIES

  • 问题3:错误 C2589 “(”:“::”右边的非法标记 testHelloworld
    在这里插入图片描述
    解决方案
    预处理器中增加宏定义:NOMINMAX
    参考解决方案

终于编译成功了!!!

但是、但是、但是

  • 执行过程中报错缺少dll库?
    解决方案
    缺什么库,就在ShareDLL文件夹下复制dll库至工程文件下;

最终执行成功
在这里插入图片描述
文末附上编译好的ceres库和测试demo:https://download.csdn.net/download/qq_40957243/80429292


# 总结 本文主要学习记录ceres库在windows下的编译过程,仅供学习参考

参考文献:

本着尊重原创的原则,在此附上参考文献,再次感谢两位作者;
Ceres Solver 在Windows下安装配置笔记
Ceres-Solver库使用(一)–windows下安装配置

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下编译、配置ceres库(保姆级教程) 的相关文章

随机推荐

  • 数据库系统 复习总结

    绪论 关系数据库 关系模型 完整性约束 关系运算 SQL语句 数据库安全 数据库安全性 数据库完整性 数据库设计 数据库设计概述与需求分析 函数依赖 无损连接验证算法 范式 关系模式分解 物理存储结构 磁盘容错技术 主索引 辅助索引 事务
  • 桥接模式-

    定义 也称为桥梁模式 接口模式或柄体模式 是将抽象部分与它的具体实现部分分离 使它们都可以独立地变化 适用场景 1 在抽象和具体实现之间需要增加更多的灵活性的场景 2 一个类存在两个 或多个 独立变化的维度 而这两个 或多个 维度都需要独立
  • 记一次Connection refused: no further information: localhost/127.0.0.1:6379的排错

    解决Redis connection refusd遇到的一个问题 错误描述 我做一个登陆界面时 把token令牌储存在Redis中 输入正确的账号密码时 在控制台显示如下错误 2020 01 31 14 20 34 DEBUG Connec
  • 2023年“网络安全”赛项浙江省金华市选拔赛 任务书

    2023年 网络安全 赛项浙江省金华市选拔赛 任务书 任务书 一 竞赛时间 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作
  • JavaScript基础Day05:对象

    JavaScript基础Day05 对象 文章目录 JavaScript基础Day05 对象 一 对象 1 创建对象 2 自定义构造函数创建对象 3 通过字面量创建对象 4 new关键字 5 this关键字 二 对象的使用 1 获取属性 两
  • [工业互联-5]:工业无线互联总线之IO-Link Wireless

    目录 第1章 IO Link Wireless概述 1 1 IO Link有线 1 2 IO Llink无线出现 1 3 IO Link Wireless概述 1 4 IO Link Wireless性能指标 第2章 IO Link Wir
  • qt android 开发篇之如何实现圆盘(hsv)颜色选择器

    在很多情况 我们开发应用的时候经常会用到颜色选择器 大一的时候我做一个涂鸦软件的时候遇到的一个问题 就是如何在qt上做一个圆盘的颜色选择器 这次做一个例子来让大家了解这种控件是怎么做的 首先我们要理解颜色中的hsv的概念 大家可以直接百度h
  • 对话框--QDialog(自定义对话框简单实例)

    dialog h头文件 ifndef DIALOG H define DIALOG H include
  • 【T+】畅捷通T+修改数据精度小数点,提示小数位数只能改大。

    问题描述 使用畅捷通T 软件过程中 修改数据精度过程中 由于误操作 误将数量小数位数改大 并且保存了 但是看软件的说明以及提示 软件提示 数量小数位只能改大 软件说明 建账后位数只能改长不能改短 解决方法 首先 表明自己的立场 如果小数位不
  • 什么是 C# ,什么是 .Net 框架(.Net Framework)及其开发环境(学习心得 1)

    超级小白友好 讲解C 基础 每集5分钟轻松学习 拒绝从入门到放弃 C 是 Net 框架的一部分 用于编写 Net 应用程序 文章目录 Net 框架 Net Framework C 的集成开发环境 Integrated Development
  • ESP32(MicroPython)四轮差速底盘遥控

    本项目主控改为ESP32 C3 沿用之前的L298N电机驱动 12 6v 18650电池组 LM7805降压模块的方案 电机改用1 19减速比的 使用130mm车轮 主要考虑越野用途 遥控方面 本项目使用HC 14模块 实测连接到电脑可以通
  • 大数据技术与实践学习笔记(1 of 3,from hitwh)

    大数据技术与实践 注意 由于文章图片是通过typora一键上传图片实现 该功能还存在bug 容易导致图片顺序混乱 文章开头提供了原版文章的 pdf 资源下载 推荐下载 pdf 后观看 文章目录 大数据技术与实践 1 1 大数据技术概述 一
  • CSDN文章复制没有图片只有文字

    有朋友反映 复制CSDN页面内容 然后粘贴 结果发现图片没拷过来 只有文字部分 是这样吗 做一个测试 确认这个问题存在 随便找了一个页面 53 岁的我都退休了 但好想跨行当一名程序员 结果收到了 3 份 Offer 相当的励志 人家53岁老
  • 搭建Docker+SRS服务器实现推流拉流的效果

    最初的一个想法 是针对当前的网络电视去的 很多网络电视买回家 还要充很多会员 甚至跌入连环坑 我想给妈妈买一台电视 想把我自己收集的电影电视剧做成一个影视库 通过搭建家庭影院服务器 然后在安卓终端上面点播 最初想得很简单 就是做一个文件服务
  • web中css怎么去除链接的,css中怎么为导航添加超链接

    css中怎么为导航添加超链接 发布时间 2021 07 09 16 43 47 来源 亿速云 阅读 55 作者 Leah 这篇文章将为大家详细讲解有关css中怎么为导航添加超链接 文章内容质量较高 因此小编分享给大家做个参考 希望大家阅读完
  • 自动驾驶通信中间件ecal源码分析—2. Broker vs Brokerless

    前面我们提到ecal是没有中间代理商的 brokerless 那么什么是Broker和Brokerless 1 Message Broker A message broker is software that enables applica
  • java.lang.ArrayIndexOutBoundException数组越界异常解决

    ArrayIndexOutBoundException是数组越界异常 非常常见的一个异常 从字面意思理解是数组下标访问错误 通常是在使用的时候访问了错误的数组下标 个人觉得这个问题的出现一般是搞混了数组长度和下标的问题 数组的长度 是指数组
  • C/C++语言ACM格式输入输出练习

    文章目录 1 输入字符串个数 一行字符串 空格隔开 2 输入多组字符串 空格隔开 3 数多组字符串 逗号隔开 1 输入字符串个数 一行字符串 空格隔开 题目描述 对输入的字符串进行排序后输出 打开以下链接可以查看正确的代码 https ac
  • 当在浏览器输入一个URL后会发生什么

    上网这件事对于现时代年轻人来说已经是家常便饭了 那么当输入一个URL 网址 之后会发生什么呢 这里面涉及到计算机图形学 操作系统 编译原理 计算机网络 通信原理 分布式系统 浏览器原理等多个不同的学科 领域 在这里由于我的能力和知识都有限
  • windows下编译、配置ceres库(保姆级教程)

    文章目录 前言 一 cmake安装 二 ceres 依赖库的下载 2 1 依赖库的下载 2 2 编译前准备工作 2 2 1 创建vs工程的输出文件夹 2 2 2 创建编译库的输出文件夹 2 3 编译Eigen库 2 3 1 编译Eigen3