zoukankan      html  css  js  c++  java
  • 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:ceresgflags-2.0srcwindowsport.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:cereseigen“ 
    GLOG_INCLUDE_DIR为”D:ceresglog-mastersrcwindows“
    GLOG_LIBRARY为”D:ceresglog-masterDebuglibglog.lib“
    GFLAGS_INCLUDE_DIR为"D:ceresgflags-2.0"
    GFLAGS_LIBRARY为"D:ceresgflags-2.0Debuglibgflags-debug.lib"

    然后重点来了:

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

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

    Configuring done and generating done.

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

    5. 整理并使用

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

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

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

    D:ceresceres-solver-1.11.0includeceres

    D:ceresceres-solver-1.11.0configceresinternal(复制到D:ceresincludeceresinternal文件夹中)

    D:ceresglog-mastersrcwindowsglog

    D:ceresgflags-2.0srcwindowsgflags

    D:cereseigenEigen

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

    D:ceresglog-masterDebuglibglog.lib

    D:ceresceres-solver-1.11.0mybuildlibDebugceres-debug.lib

    D:ceresgflags-2.0Debuglibgflags-debug.lib

    D:ceresglog-masterDebuglibglog.dll(复制到C:WindowsSysWOW64文件夹中)

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

  • 相关阅读:
    基于Kibana的可视化监控报警插件sentinl入门
    es聚合学习笔记
    spark streaming基本概念一
    es实战一:基本概念
    访问者模式(Visitor Pattern)
    模板方法模式(Template Method Pattern)
    策略模式(Strategy Pattern)
    状态模式(State Pattern)
    观察者(Observer)模式
    备忘录模式(Memento Pattern)
  • 原文地址:https://www.cnblogs.com/ninahu/p/6800660.html
Copyright © 2011-2022 走看看