Windows环境下配置Ceres(带suitesparse-metis)

it2024-12-29  9

1 配置环境与源代码包

环境

Windows>=8.1 Visual Studio>=2013 专业版x64 Cmake GUI>=3.13

Ceres-solver 1.14.0

下载地址:http://ceres-solver.org/installation.html

Eigen 3.3.5 release

下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page 著名的矩阵运算库。

gflags 2.2.1

下载地址:https://github.com/gflags/gflags GFlags是Google开源的一个命令行flag(区别于参数)库。

glog

下载地址:https://github.com/google/glog Google Glog是Google的一个开源库,用于实现应用级别的logging。它提供了一系列类似于C++流风格的logging API,以及一些预定义的宏。它有点类似于C里面的assert,但是比它具备更丰富的输出信息以及使用灵活性。

suitesparse-metis-for-windows-master

下载地址:https://github.com/jlblancoc/suitesparse-metis-for-windows 这个并不是必须安装的依赖库。但是如果装上将会提高Ceres对稀疏矩阵的计算性能,提供更多可用的优化算法。所以虽然加入这个库之后Ceres的安装过程会更加繁琐,但是仍然推荐安装。这个库的原生版本本身对Windows的支持不好,所以在Windows上要使用这个专门针对Windows的衍生版本。另外,这个库还存在一个名为CXSparse的简化版本。

配置准备

建立一个文件夹,如C:\VCProject\ceres,将下载的源代码包放在此文件夹中,然后把所有源代码解压放到对应的子文件夹内。另外为每个库按照“库名-build”的命名方式新建文件夹,用以存放生成后的工程文件,如图1-1所示。 图1-1

2 Eigen配置

Eigen库本身是并不需要安装的,解压放在某文件夹内即可。为了方便管理,将这些库放在同一位置,如C:/Program Files。

1 . 启动CMake。 指定源代码位置为C:/VCProject/ceres/eigen-eigen,输出位置为C:/VCProject/ceres/eigen-build。编译平台根据系统环境选择“Visual Studio 12 2013 Win64”。 2 . 配置选项

取消所有的Test类项。 CMAKE_INSTALL_PREFIX = C:/Program Files/Eigen3

3.以管理员身份运行Visual Studio 2013,打开C:/VCProject/ceres/eigen-build/Eigen3.sln解决方案。分别以Debug和Release模式(x64)生成INSTALL项目以完成安装。

3 gflags配置

1.启动CMake。指定源代码位置为C:/VCProject/ceres/gflags-master,输出位置为C:/VCProject/ceres/gflags-build。编译平台根据系统环境选择“Visual Studio 12 2013 Win64”。 2.配置选项

取消选中BUILD_TESTING类项。 CMAKE_INSTALL_PREFIX = C:/Program Files/gflags 选中BUILD_SHARED_LIBS 以便生成.dll文件

3.以管理员身份运行Visual Studio 2013,打开C:/VCProject/ceres/gflags-build/gflags.sln解决方案。分别以Debug和Release模式(x64)生成INSTALL项目以完成安装。

4 glog配置

1.启动CMake。指定源代码位置为C:/VCProject/ceres/glog-master,输出位置为C:/VCProject/ceres/glog-build。编译平台根据系统环境选择“Visual Studio 12 2013 Win64”。 2.配置选项

取消选中BUILD_TESTING类项 CMAKE_INSTALL_PREFIX = C:/Program Files/glog 选中BUILD_SHARED_LIBS以便生成.dll文件,如果该项不存在通过“Add Entry”手动加入。 选中WITH_GFLAGS gflags_DIR = C:/Program Files/gflags/lib/cmake/gflags

3.以管理员身份运行Visual Studio 2013,打开C:/VCProject/ceres/glog-build/glog.sln解决方案。分别以Debug和Release模式(x64)生成INSTALL项目以完成安装。

5 suitesparse-metis-for-windows-master配置

1.鉴于屡次配置出现的错误,首先将C:\VCProject\ceres\suitesparse-master\metis\programs\CMakeLists.txt做修改,即在图5-1中红色框线内的四行语句中,分别添加…/GKlib/getopt.c,修改后的结果如图5-1所示: 图5-1 2.启动CMake,分别选择源码路径和待生成路径,如图5-2所示: 图5-2 3.点击Configure,选择相应的编译器后,如图5-3所示: 图5-3 4.配置相关项

取消勾选Group和Advanced 选中BUILD_METIS,用以构建metis库 选中BUILD_SHARED_LIBS,以便生成动态链接库文件 选中SUITESPARSE_USE_CUSTOM_BLAS_LAPACK_LIBS 添加BLAS_LIBRARIES项(FILEPATH类)赋值:C:/VCProject/ceres/suitesparse-master/lapack_windows/x64/libblas.lib 添加LAPACK_LIBRARIES项(FILEPATH类)赋值 C:/Program C:/VCProject/ceres/suitesparse-master/lapack_windows/x64/liblapack.lib

再次点击Configure,并点击Generate,生成VS工程文件,如图5-4所示: 图5-4 5.以管理员身份运行VisualStudio2013,打开刚生成的解决方案SuiteSparseProject.sln。分别以Debug和Release模式(x64)生成ALL_BUILD项目和INSTALL项目,分别发现没有错误并成功生成22个工程。生成时间上,Debug模式较Release模式更快一些。

6 Ceres配置

1.启动CMake,分别选择源码路径和待生成路径,如图6-1所示: 图6-1 2.点击Configure,选择相应的编译器后,如图6-2所示: 图6-2 3.配置相关项

配置AMD_INCLUDE_DIR、CAMD_INCLUDE_DIR、CCOLAMD_INCLUDE_DIR、CHOLMOD_INCLUDE_DIR、COLAMD_INCLUDE_DIR、SUITESPARSEQR__INCLUDE_DIR等6个头文件的路径以及相应的6个静态库的路径。 选中BUILD_SHARED_LIBS,以便生成动态链接库文件。 CMAKE_BUILD_TYPE 设为 Release。 选中CUSTOM_BLAS。 选中EIGENSPARSE。如果之前没有安装Eigen,只是解压。这里还需要手动配置EIGEN_INCLUDE_DIR项或Eigen3_DIR。 添加LAPACK_LIBRARIES项(FILEPATH类)赋值 C:/Program C:/VCProject/ceres/suitesparse-master/lapack_windows/x64/liblapack.lib。 GFLAGS和GLOG是否被选中,并且正确定位。如果安装在C盘Program FIles应该可以自动定位。 选中LAPACK_BLAS。 添加BLAS_LIBRARIES项(FILEPATH类)赋值:C:/VCProject/ceres/suitesparse-master/lapack_windows/x64/libblas.lib。 选中SUITESPARSE。 添加SUITESPARSE_CHECK_INCLUDE_DIRS项(PATH类)赋值 C:/VCProject/ceres/suitesparse-build/install/include ,提示suitesparse组件头文件位置。 添加SUITESPARSE_CHECK_LIBRARY_DIRS项(PATH类)赋值 C:/VCProject/ceres/suitesparse-build/install/lib,提示suitesparse组件库文件位置。 CMAKE_INSTALL_PREFIX 赋值 C:/Program Files/Ceres。

以上诸项的配置结果如图6-3所示: 图6-3 再次点击Configure,并点击Generate,生成VS工程文件,如图6-4、6-5所示: 图6-4 图6-5 5.以管理员身份运行VisualStudio2013,打开刚生成的解决方案Ceres.sln,切换编译器为Release模式,然后生成ALL_BUILD和INSTALL项目,完成Release模式的编译和安装过程。 切换到Debug模式。然后右键单击“ceres”项目->属性->C/C++ ->链接器->输入->附加依赖项。这里要注意属性管理也应设为Debug模式。 将以下7个Release版本的库改为Debug版本的库 C:\VCProject\ceres\suitesparse-build\install\lib\libspqr.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcholmod.lib C:\VCProject\ceres\suitesparse-build\install\lib\libccolamd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcamd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcolamd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libamd.lib C:\VCProject\ceres\suitesparse-build\install\lib\suitesparseconfig.lib 调整为Debug版本库: C:\VCProject\ceres\suitesparse-build\install\lib\libspqrd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcholmodd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libccolamdd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcamdd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libcolamdd.lib C:\VCProject\ceres\suitesparse-build\install\lib\libamdd.lib C:\VCProject\ceres\suitesparse-build\install\lib\suitesparseconfigd.lib 然后生成ALL_BUILD和INSTALL项目,完成Debug模式的编译和安装过程。 注意:在Debug版本的ALL_BUILD生成时,会出现以下错误: error C1128:字节数超过对象文件格式限制:请使用/bigobj进行编译 经排查,可通过打开nist工程属性页->C/C++ ->命令行->键入/bigobj编译器消除错误,如图6-6所示。 图6-6

7 测试

首先配置环境变量: 我的电脑->属性->更改设置->高级->环境变量->系统变量->Path->编辑。 在PATH中加入以下五个地址:

C:\Program Files\Ceres\bin C:\Program Files\gflags\bin C:\Program Files\glog\bin C:\Program Files\suitesparse\bin C:\Program Files\suitesparse\lib64\lapack_blas_windows

打开cmd,切换到ceres-build/bin路径下的Release和Debug下,然后运行分别运行helloworld.exe,如果看到convergence的话,即收敛,说明Release和Debug下的编译均成功,如图7-1所示。 图7-1

8 参考资料

https://blog.csdn.net/wzheng92/article/details/79504709?utm_source=blogxgwz3 https://blog.csdn.net/zhj_matlab/article/details/79077695 https://blog.csdn.net/yhz78321/article/details/79922592?utm_source=blogxgwz3

9 致谢

非常感谢上述所列的三位博主的分享,尤其是第一位博主对我成功配置Ceres库的贡献最大,本文的撰写框架也主要参考的是第一位博主的文章。在此向以上三位博主表达最诚挚的谢意。 我在我的硬软件环境下配置的过程中,遇到了我所查阅的资料所不能解决的问题,后在朋友的帮助之下得以解决,在此与大家共享,只希望能够给那些需要配置Ceres库的人提供一个快速配置的方案,以减少不必要时间上的浪费,毕竟学习Ceres里的知识才是关键。 逢山开路,遇水搭桥。这里,我所能解决的仅仅是对我所遇到的问题。对于那些未发现的问题,愿共探讨,以期近是。

最新回复(0)