欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-05-28
文章目录

前言一、cmake安装二、ceres 依赖库的下载

2.1.依赖库的下载2.2.编译前准备工作

2.2.1.创建vs工程的输出文件夹2.2.2.创建编译库的输出文件夹 2.3.编译Eigen库

2.3.1.编译Eigen3 2.4.编译gflags2.5.编译glog2.6.编译SuiteSparse

2.6.1、生成静态库文件2.6.2.生成动态库文件 2.7.编译Ceres 三、测试ceres库文件

3.1.获取所有头文件和库文件3.2.helloworld测试

3.2.1.创建vs工程,添加ceres源代码中example文件夹下的helloworld.cc 文件;3.2.2.添加包含目录和库目录:3.2.3.引入静态库3.2.4.编译踩坑 参考文献:


前言

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/-/releasesceres: https://github.com/ceres-solver/ceres-solvergflags: https://github.com/gflags/gflagsglog: https://github.com/google/glogsuitesparse: 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;

配置选项:

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.libLAPACK_LIBRARIES(FILEPATH)
E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/lib64/lapack_blas_windows/liblapack.libGLOG(BOOL):选中打勾SUITESPARSE_CHECK_INCLUDE_DIRS(PATH):E:/3Dparty/Ceres/3DpartyLib/suitesparseLib/includeSUITESPARSE_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:3DpartyCeres3DpartyLibCeresLibinclude路径下的ceres文件夹至E:3DpartyCeres3DpartyLibCeresInclude复制E:3DpartyCeres3DpartyLibglogLibinclude路径下的glog文件夹至E:3DpartyCeres3DpartyLibCeresInclude复制E:3DpartyCeres3DpartyLibgflagLibinclude路径下的gflag文件夹至E:3DpartyCeres3DpartyLibCeresInclude复制E:3DpartyCeres3DpartyLibEigenLibincludeeigen3路径下Eigen文件夹至E:3DpartyCeres3DpartyLibCeresIncludeceres

依次分别复制头文件,静态库文件,动态库文件如下:
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:3DpartyCeres3DpartyLibCeresIncludegloglog_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下安装配置

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。