首页 > 代码库 > vs2015+64位win10系统ceres-solver编译

vs2015+64位win10系统ceres-solver编译

记录下自己编译ceres-solver走过的弯路,同时希望对其他人能有所帮助。

编译过程主要参考以下两篇博文,但还是存在一些大坑,后面我会着重强调。

http://blog.csdn.net/streamchuanxi/article/details/52944652

http://blog.csdn.net/yizhou2010/article/details/52596280

 

1. 下载必备库ceres-solver-1.11.0、eigen、gflags-2.0、glog-master

具体下载地址自行上网搜索,下载后解压到文件夹ceres中。

在接下的编译过程中,需要十分注意的是:千万不要做平台的修改,必须在win32/x86下编译,否则即使最后成功也无法使用!!!

 

2. 编译glog

解压后直接用vs2015打开google-glog.sln,版本问题直接迁移即可。

生成失败主要解决以下两个问题:

问题一:

错误 C2375 “snprintf”: 重定义

解决方法:注释掉语句

//extern int GOOGLE_GLOG_DLL_DECL snprintf(char *str, size_t size,

// const char *format, ...);”

问题二:

错误 C2084 函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体”

解决方法:

同样注释掉语句

“//int snprintf(char *str, size_t size, const char *format, ...) {

// va_list ap;
// va_start(ap, format);
// const int r = vsnprintf(str, size, format, ap);
// va_end(ap);
// return r;
//}”

 

3. 编译gflags

同样用vs2015打开gfalgs.sln(高版本貌似需要用cmake生成工程后再编译)。

主要存在以下几个问题:

问题一:

“错误 C2375 “snprintf”: 重定义;不同的链接 libgflags d:\ceres\gflags-2.0\src\windows\port.h 60”

错误 C2084 函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体”

解决方法:同上,注释掉语句

问题二:

错误 C3688 文本后缀“PRIu64”无效;未找到文文本运算符或文本运算符模板

解决方法:
将"%"PRId32改为“%d”

将"%"PRId64改为”%I64d“

将"%"PRIu64改为”%I64u“

 

4. 编译ceres

采用cmake的方式(若不会使用可参照开头给出的链接)

另:eigen库直接解压即可,不需要另外编译

设置目录如下:

EIGEN_INCLUDE_DIR为”D:\ceres\eigen“ 
GLOG_INCLUDE_DIR为”D:\ceres\glog-master\src\windows“
GLOG_LIBRARY为”D:\ceres\glog-master\Debug\libglog.lib“
GFLAGS_INCLUDE_DIR为"D:\ceres\gflags-2.0"
GFLAGS_LIBRARY为"D:\ceres\gflags-2.0\Debug\libgflags-debug.lib"

然后重点来了:

必须要将选项中的EIGENSPARSE勾上!!!

否则即使最后成功生成在很多情况下也是运行失败的。

Configuring done and generating done.

最后,打开ceres.sln,生成ALL_BUILD,不出意外应该没什么问题。

 

5. 整理并使用

所需的各种文件已经全部生成,下面进行适当的整理就可以使用了。

在ceres目录下新建include和lib文件夹(便于项目添加)

将以下文件复制到include文件夹:

D:\ceres\ceres-solver-1.11.0\include\ceres

D:\ceres\ceres-solver-1.11.0\config\ceres\internal(复制到D:\ceres\include\ceres\internal文件夹中)

D:\ceres\glog-master\src\windows\glog

D:\ceres\gflags-2.0\src\windows\gflags

D:\ceres\eigen\Eigen

将以下文件复制到lib文件夹:

D:\ceres\glog-master\Debug\libglog.lib

D:\ceres\ceres-solver-1.11.0\mybuild\lib\Debug\ceres-debug.lib

D:\ceres\gflags-2.0\Debug\libgflags-debug.lib

D:\ceres\glog-master\Debug\libglog.dll(复制到C:\Windows\SysWOW64文件夹中)

 

好了,所有的工作都已经完成了,最后只要在需要用到ceres的项目中添加c++目录和链接器即可。

 

vs2015+64位win10系统ceres-solver编译