Ceres-Solver在VS2017下的配置

Ceres-Solver在VS2017下的配置

简介

Ceres Solver 是一个开源C++库,用于建模和解决大型复杂的优化问题。可以高效地解决具有边界约束的非线性最小二乘问题和一般的无约束优化问题。

准备工作

编译工具

  1. vs2017
  2. cmake

ceres工具包和第三方依赖库

  1. ceres-solover
  2. gflags
  3. glog
    下载下来的依赖包如下:
    这里写图片描述

开始编译

编译gflas

打开cmake-gui.exe,在source code中选择刚才所下载的gflas,如下:
这里写图片描述
点击config,根据自己情况选择编辑器,因为我是在vs2017下编译,且我最终需要的环境是64位,所以我的选择是Visual Studio 15 2017 Win64
再次点击config,这时候已经没有红框了,即配置正确,然后点击generate,生成解决方案,打开。
这里写图片描述
右键ALL_BUILD生成,如果没有报错,则gflas生成成功。接下去编译glog
这里写图片描述

编译glog

同理,在source code中选择刚才下载的glog,并指定编译位置,选择编译器。
点击config,这时候需要在指定先前生成的gflags的位置,如下:
这里写图片描述
再次点击config,这时候已经没有红框了,即配置正确,然后点击generate,生成解决方案,打开。
右键ALL_BUILD生成,如果没有报错,则glog生成成功。接下去编译ceres-solver。

编译ceres-solver

同理,在source code中选择刚才下载的ceres-solver,并指定编译位置,选择编译器。
点击config,这时候需要指定之前所下载的eigen库,并将EIGENSPARSE选上
这里写图片描述
再次点击config,指定先前的gflags和glog,如下:
这里写图片描述
再次点击config,指定CMAKE_BUILD_TYPE,如下:
这里写图片描述
再次点击config,这时候已经没有红框了,即配置正确,然后点击generate,生成解决方案,打开。
右键ALL_BUILD生成,如果没有报错,则ceres-solver生成成功。

按照这样子的一套流程,最后得到的是ceres的静态链接库,在使用的时候,需要包含头文件还有之前生成的静态链接库。

测试

打开cmd,切换到ceres-build/bin/Debug下,然后运行helloworld.exe,如果看到convergence的话,即收敛,说明编译成功。
这里写图片描述

遇到的问题

我在使用的时候遇到了一些错误:
1.

#error:  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail. 

解决方法:在项目->属性->c/c++->预处理器->预处理器定义中加入
GLOG_NO_ABBREVIATED_SEVERITIES

根据官网给的信息,这是与windows.h下定义的ERROR发生了冲突。
2.

error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl google::LogMessageVoidify::operator&(class std::basic_ostream<char,struct std::char_traits<char> > &)"

解决方法:在项目->属性->c/c++->预处理器->预处理器定义中加入GOOGLE_GLOG_DLL_DECL=

这个报错信息是动态链接库中的函数信息有误,这是我比较奇怪的一点,因为生成的时候我并没有选择动态链接库而是采用了静态链接库,并不理解为什么会产生这个错误,不过官方文档给出了解决方案,如上。

另外我不明白为什么要加个=,我去看了代码,代码里的宏定义明明是GOOGLE_GLOG_DLL_DECL,希望能得到解答!

参考

http://ceres-solver.org/
http://www.cnblogs.com/youxin/p/4896540.html

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值