zoukankan      html  css  js  c++  java
  • 基于Win10+VS2019的ceres-solver-2.0.0配置流程

    文中有些部分笔者也不确定一定正确,如有问题欢迎指出

    下载编译 ceres 所需的资源(下面为本文所使用的版本),编译器使用 VS2019 自带的 MSVC ,所有库均编译 Debug 和 Release 版本

    eigen-3.3.9
    https://eigen.tuxfamily.org/index.php?title=Main_Page
    gflags-2.2.2
    https://github.com/gflags/gflags
    glog-0.4.0
    https://github.com/google/glog
    ceres-solver-2.0.0
    https://github.com/ceres-solver/ceres-solver
    cmake-3.20.1
    https://cmake.org/download/

     然后将四个压缩包解压到同一个文件夹下,当然不在一个文件夹下也可以,只用在配置路径的时候修改为对应路径即可

    编译顺序为 gflags -> glog -> ceres,eigen 在 ceres 编译之前任意时候编译均可,那么先编译 eigen 库好了(官方文档里顺序是先 glog 后 gflags)

    Eigen

    在 eigen 文件夹下创建 eigen-build 文件夹,文件夹命名没有限制,使用其他名称或路径在配置时修改为对应路径即可,笔者均将编译文件夹放在对应库下,文件夹命名为 库名-build

    在源码路径( Where is the source code: )中填写 eigen 文件夹路径,在编译路径( Where to build the binaries )填写 eigen-build 文件夹路径,然后点击 Configure ,如果安装了VS2019默认会选择上,4 和 5 步保持默认即可,其他版本的编译器则根据实际情况选择

    取消勾选 BUILD_TESTING(不取消也可以) ,将 CMAKE_INSTALL_PREFIX 修改为 C:/Program Files/Eigen3(好像修改了也没有什么变化,不改也没问题),再点一次 Configure ,所有的红色条都没有了(除非有错误),然后点击 Generate 生成 VS 工程,然后点击 Open Project 打开工程

    如果界面关掉了可以在 eigen-build 下找到 Eigen3.sln 文件打开工程,其他库同理,找到 sln 文件即可打开工程

    分别选择 Debug - x64Release - x64 然后点击 重新生成 ALL_BUILD

     

    即可获得两个文件夹(不过 eigen 库不用编译也没问题,但编译了也不会有问题,所以编译了吧)

    gflags

    创建 gflags-build 文件夹

    相同操作

    勾选 BUILD_SHARED_LIBS 生成 lib 文件,将 CMAKE_INSTALL_PREFIX 修改为 C:/Program Files/gflags ,然后点击 Configure 消红

     

     点击 Generate 生成 VS工程后点击 Open Project 打开工程

    两个模式分别编译

     即可得到两个文件夹

    glog

    创建文件夹

    配置文件夹

    勾选 BUILD_SHARED_LIBS 生成 lib 文件,将 CMAKE_INSTALL_PREFIX 修改为 C:/Program Files/glog勾选 WITH_GFLAGS(默认已勾选) ,设置 gflags_DIRgflags-build 路径,再次 Configure 消红然后 Generate,成功后打开 VS 工程

    分别编译 Debug 和 Release,结果如下

     得到两个文件夹

    ceres

    新建文件夹,前面的编译大概率能够一遍通过,ceres 的话还是很容易出问题的,如果报错了只能多借助搜索引擎了

    配置文件夹

    勾选 BUILD_SHARED_LIBS 生成 lib 文件,将 CMAKE_INSTALL_PREFIX 修改为 C:/Program Files/Ceres

    勾选 EIGENSPARSE(默认已勾选) 和 GFLAGS ,设置 eigen 、 gflags 和 glog 的相关目录

    点击 Configure 后设置 CMAKE_BUILD_TYPERelease; Debug

    再次 Configure 消红,Generate 后打开工程

    这时可以尝试编译一下,但 Debug 版本很可能会出现 文件长度超过260字符 的错误,此时需要修改注册表解除文件长度限制,然后重启电脑(注销用户也可以)

    再次编译

    可获得两个文件夹

    但这时里面的程序还是无法运行的,有三个办法(注意对应的 Debug 和 Release 版本)

    1、将 glog.dll 和 gflags.dll 两个文件拷贝到运行目录下

    2、将 glog.dll 和 gflags.dll 两个文件拷贝到 C:WindowsSystem32 目录下

    3、将编译文件夹添加到系统环境中后重启电脑或注销用户(但有时依旧会找不到文件)

    右键我的电脑 - 属性 - 高级系统设置 - 环境变量 - 系统变量 - PATH

    然后添加对应版本的包含 dll 文件的路径即可

    配置完 dll 文件之后运行 helloworld.exe 文件测试下

    在地址栏中输入 cmd ,然后输入 helloworld.exe ,即可得到以下结果,出现 CONVERGENCE 即为收敛

    在 VS2019 中使用

    首先创建一个工程 test_ceres ,然后将 ceres-solver-2.0.0/examples/helloworld.cc 拷贝到 test_ceres/test_ceres/ 目录下并添加进工程,将工程切换到 Release - x64 ,后续添加的文件版本都是 Release 版本

    项目根目录下创建 include lib 两个文件夹

    在 调试 - test_ceres 调试属性 - 配置属性 - VC++ 目录 - 包含目录 中添加 ..include

    在 调试 - test_ceres 调试属性 - 配置属性 - VC++ 目录 - 库目录 中添加 ..lib

    添加头文件

    将下列文件夹复制到 test_ceres/include/ 目录下

    ceres-solver-2.0.0/include/ceres(文件夹) 

    eigen-3.3.9/Eigen(文件夹)

    gflags-2.2.2/gflags-build/include/gflags(文件夹)

    glog-0.4.0/glog-build/glog(文件夹)

    此时运行还会报以下错误,将这些文件拷贝到对应目录下

    错误 C1083 无法打开包括文件: “glog/log_severity.h”: No such file or directory

    glog-0.4.0/src/glog/log_severity.h 复制到 test_ceres/include/glog/log_severity.h

    错误 C1083 无法打开包括文件: “ceres/internal/config.h”: No such file or directory

    ceres-solver-2.0.0/config/ceres/internal/config.h 复制到 test_ceres/include/ceres/internal/config.h

    错误 C1189 #error: One of CERES_USE_OPENMP, CERES_USE_CXX_THREADS or CERES_NO_THREADS must be defined.

    意为没指定以哪种方式运行 ceres ,在 调试 - test_ceres 调试属性 - 配置属性 - C/C++ - 预处理器 - 预处理器定义 中添加 CERES_USE_CXX_THREADS

    错误 C3861 “M_2_SQRTPI”: 找不到标识符

    调试 - test_ceres 调试属性 - 配置属性 - C/C++ - 预处理器 - 预处理器定义 中添加 _USE_MATH_DEFINES

    错误 C4996 'j0': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _j0. See online help for details.

    打开对应文件找到 600 行,可以发现有 j0 j1 jn 三个函数,同时有一个宏定义,开启后则使用 _j0 _j1 _jn

    因此在 调试 - test_ceres 调试属性 - 配置属性 - C/C++ - 预处理器 - 预处理器定义 中添加 CERES_MSVC_USE_UNDERSCORE_PREFIXED_BESSEL_FUNCTIONS

    添加库文件

    将下面的文件复制到 test_ceres/lib/ 目录下

    ceres-solver-2.0.0/ceres-build/lib/Release/ceres.lib

    gflags-2.2.2/gflags-build/lib/Release/gflags.lib

    glog-0.4.0/glog-build/Release/glog.lib

    在 调试 - test_ceres 调试属性 - 配置属性 - 链接器 - 输入 - 附加依赖项 中添加库的名称(一行一个

    ceres.lib
    gflags.lib
    glog.lib

    添加动态链接库

    将下面的文件复制到 test_ceres/test_ceres/ 目录下,当然可以使用上文提到的方法 2 或 方法 3 来添加动态链接库

    ceres-solver-2.0.0/ceres-build/bin/Release/ceres.dll

    gflags-2.2.2/gflags-build/bin/Release/gflags.dll

    glog-0.4.0/glog-build/Release/glog.dll

    此时再运行即可得到和前面运行 helloworld.exe 相同的结果了……当如不是,因为没有编译 suitesparse 

     因此配置里添加下面这一句指定求解器类型

    options.linear_solver_type = ceres::DENSE_QR;

     即可得到相同的结果了

    感谢

    Windows环境下配置Ceres(含Eigen、gflags、glog、merit、suitesparse)
    https://blog.csdn.net/xixihaha369300/article/details/83546473

    Win10 x64 vs2017 下配置Ceres Solver 环境
    https://blog.csdn.net/maoluluzuibang/article/details/79508321

    Win10+vs2017配置Ceres
    https://blog.csdn.net/wonder1113/article/details/88725646

    Ceres Solver Docs
    http://ceres-solver.org/installation.html#windows

    如何使Windows 10接受超过260个字符的文件路径
    https://cn.compozi.com/5800-how-to-make-windows-10-accept-file-paths-over-260-characters
  • 相关阅读:
    练习12
    练习11
    练习10(图片题)
    练习9(第九章习题)
    练习8(图片题)
    练习5
    练习4
    对象的赋值与比较
    静态方法
    静态变量
  • 原文地址:https://www.cnblogs.com/Pyrokine/p/14636228.html
Copyright © 2011-2022 走看看