VS2019+WIN10+Ceres(含suitesparse)配置,已CMake,亲测可用

由于已经CMake,因此仅限VS2019+win10使用

  • 前言
    • 环境
    • 资源下载
    • 真正用到的资源
    • 注意!
  • 我的配置过程
    • Eigen
    • 其他库的安装
    • 路径和环境变量
    • VS配置
    • 测试
  • 结语

前言

ceres可用于非线性运算,依赖库包含eigen, gflags, glog, suitesparse(optional but strongly recommended)
为什么要写这篇博客:主要是记录一下配置过程,以免以后需要换电脑再使用ceres时忘记配置过程。配置时,参考了几篇已有的博客并依靠了师兄的帮助,在一台全新的笔记本上配置,但还是没有成功,因此直接保证了其他环境相同,使用已经CMake后的库,配置环境变量后发现可以通过helloworld的测试。
感谢windows配置ceres的作者,虽然没能用上您的配置方法……

环境

Visual Studio 2019
Windows 10
CMake 3.17.3 (latest version, 生成器中有VS2019 x64即可)

资源下载

我没能全用上,但是如果想要从头cmake并配置时需要用的下载链接

Ceres 1.14.0
http://ceres-solver.org/installation.html
Eigen 3.3.7 source code
http://eigen.tuxfamily.org/index.php?title=Main_Page
gflags 2.2.2 source code
https://github.com/gflags/gflags/releases
glogs 0.4.0 source code
https://github.com/google/glog/releases
suitesparse metis for windows 1.4.0
https://github.com/jlblancoc/suitesparse-metis-for-windows/releases

真正用到的资源

https://download.csdn.net/download/qq_40613549/12546311

注意!

再次强调,真正用到的资源是CMake后的,因此对VS版本和系统都会有限制,对一些文件位置可能也有限制,所以请保证版本与文件位置一致再使用!

我的配置过程

Eigen

eigen是最简单的,并且后续要求其生成内容在C盘中存在,所有建议自行CMake。
CMake如图选择文件夹,源文件为下载的source code,bin文件夹为自行新建的eigen-build
VS2019+WIN10+Ceres(含suitesparse)配置,已CMake,亲测可用_第1张图片
点击configure,选择VS2019 x64,等待
配置选项中:
1.取消所有test选项
2.CMAKE_INSTALL_PREFIX改为C:/Program Files/Eigen3 (默认是Program Files (x86)文件夹,这个文件夹没有管理员权限是写不进去的)

再次点击configure

点击generate

以管理员身份运行VS2019(开始栏搜索vs,点打开选项下的箭头,选以管理员身份运行),分别在Release x64和Debug x64下生成INSTALL(或者选择“生成-批生成-选择Release x64和Debug x64的INSTALL-点击生成”)

生成全部成功则说明eigen库安装完成,检查C:/Program Files/Eigen3是否存在(文件夹内有include和share两个文件夹)

其他库的安装

其他的库的安装过程我参考了前文的链接,但是始终没能成功,依赖库都成功install的情况下,在CMake ceres库时生成的解决方案,其中ceres项目的属性-链接器-输入-附加依赖项中一直没有自动添加suitesparse的相关lib,而且生成ALL_BUILD和INSTALL不成功。之后,就决定将另一台笔记本上相同环境配置的文件全部复制过来,测试helloworld成功。注意,这是没有办法才出此下策,建议先尝试参考前文链接从头配置。

下载这里的压缩包,其中包含了ceres和SDK两个压缩包,全部解压。

ceres压缩包中包含了各个库CMake后的二进制文件以及生成的项目,压缩包中的ceres-build文件夹是生成ceres库的文件夹,其中./bin/Release和./bin/Debug中的helloworld.exe可以用于测试。

SDK中包含:① 在CMake过程中生成的包含目录和库目录,就是CMake每一个库时CMAKE_INSTALL_PREFIX的路径对应的文件夹,② lapack_windows,这是suitesparse的源码文件夹中的一个,需要用到它的库目录。SDK中的文件需要用于后续环境变量配置、VS属性的包含目录、库目录、附加依赖项的配置

路径和环境变量

SDK中的所有内容放在D:/SDK文件夹内(可能存在路径的依赖,所有强烈建议放在这里,未测试不放这一文件夹的情况
VS2019+WIN10+Ceres(含suitesparse)配置,已CMake,亲测可用_第2张图片
其中,eigen_build就是刚才CMake eigen库生成的C盘的Eigen3文件夹(不是自己新建的build!)
环境变量中添加如下几条,即每个库生成的二进制文件夹和lapack_windows的x64
VS2019+WIN10+Ceres(含suitesparse)配置,已CMake,亲测可用_第3张图片
ceres压缩包中都是CMake时选择生成的二进制文件路径,其中的VS项目用于库的安装(生成INSTALL,或同时生成ALL_BUILD和INSTALL),后续好像没有其他用途,因此保存路径不限。

VS配置

属性-VC++目录-包含目录,添加下列路径,即每个库的include文件夹以及eigen的include/eigen3文件夹

D:\SDK\suitesparse\include
D:\SDK\glog\include
D:\SDK\gflags\include
D:\SDK\eigen-build\include\eigen3
D:\SDK\eigen-build\include
D:\SDK\ceres_1.14.0\include

属性-VC++目录-库目录,添加下列路径,即每个库的lib文件夹以及lapack_windows的x64文件夹(工作平台需要保证是x64)

D:\SDK\lapack_windows\x64
D:\SDK\suitesparse\lib
D:\SDK\glog\lib
D:\SDK\gflags\lib
D:\SDK\ceres_1.14.0\lib

属性-链接器-输入-附加依赖项,添加下列文件

ceres.lib
glog.lib
gflags.lib
libspqr.lib
libcholmod.lib
libccolamd.lib
libcamd.lib
libcolamd.lib
libamd.lib
liblapack.lib
libblas.lib
suitesparseconfig.lib
metis.lib

测试

1 打开cmd,分别运行压缩包中ceres/ceres-build/bin/Release和ceres/ceres-build/bin/Debug下的helloworld.exe,看到如下结果,显示convergence,说明配置成功
在这里插入图片描述
2 VS2019中新建一个工程,按上节中的方法配置,新建一个源文件放入如下代码(helloworld的源码),运行,看到和测试1中相同的结果,说明VS配置成功

#include 
#include 

using namespace std;
using namespace ceres;
//第一部分:构建代价函数
struct CostFunctor {
    template <typename T>
    bool operator()(const T* const x, T* residual) const {
        residual[0] = T(10.0) - x[0];
        return true;
    }
};

//主函数
int main(int argc, char** argv) {
    google::InitGoogleLogging(argv[0]);

    // 寻优参数x的初始值,为5
    double initial_x = 5.0;
    double x = initial_x;

    // 第二部分:构建寻优问题
    Problem problem;
    CostFunction* cost_function =
            new AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor); //使用自动求导,将之前的代价函数结构体传入,第一个1是输出维度,即残差的维度,第二个1是输入维度,即待寻优参数x的维度。
    problem.AddResidualBlock(cost_function, NULL, &x); //向问题中添加误差项,本问题比较简单,添加一个就行。

    //第三部分: 配置并运行求解器
    Solver::Options options;
    options.linear_solver_type = ceres::DENSE_QR; //配置增量方程的解法
    options.minimizer_progress_to_stdout = true;//输出到cout
    Solver::Summary summary;//优化信息
    Solve(options, &problem, &summary);//求解!!!

    std::cout << summary.BriefReport() << "\n";//输出优化的简要信息
    //最终结果
    std::cout << "x : " << initial_x
              << " -> " << x << "\n";
    return 0;
}

结语

因为配置了很多天都不成功,才用了这样取巧的方法,也算是可以用。我对于CMake也没太多理解,遇到的问题还是不太清楚为什么(生成的Ceres.sln中ceres项目的附加依赖项没有应该出现的lib文件),如果有遇到相似问题并解决的大佬可以说说咋整。

再强调,所有文件CMake过,一定要保证其他环境相同才可能成功

你可能感兴趣的:(VS2019+WIN10+Ceres(含suitesparse)配置,已CMake,亲测可用)