VS2013+64位win7系统ceres solver编译教程

Ceres Solver是由Google开发的非线性最小二乘问题求解工具包,VS下虽然可以使用别人编译好的ceres.sln文件,虽然这样相对简单,但是可能会因为个人机器环境、软件配置的不同而无法使用。所以配置Ceres最好的方法是使用cmake工具生成自己的Ceres.sln。

使用ceres必备的库有eigen、glog和gflags三个,附下载地址
Ceres最新版本ceres-solver-1.11.0
eigen最新eigen库3.2.10
glog
gflags
cmake
最好使用上面我给出的地址下载,尤其是gflags,新版本的都没有sln文件,自己编译还容易出错。
接下来就是编译的过程了。
1、首先将ceres、gflags、glog解压放到同一个文件夹中,如D:/ceres;并新建include和lib两个文件夹,如图:
VS2013+64位win7系统ceres solver编译教程_第1张图片
2、将D:\ceres\glog-master\src\windows\下的glog文件和eigen文件方法上述include 文件夹下。如图:
VS2013+64位win7系统ceres solver编译教程_第2张图片
3、打开gflags文件夹,双击gflags.sln文件,然后进行编译,这里要特别注意,因为下载的文件是在VS2013以前的版本编译的,所以用VS2013打开会有一些改动,VS2013+64位win7系统ceres solver编译教程_第3张图片
点击确定就可以了,不用管。最重要的是眼根据自己机器的位数进行配置,默认的是win32的平台。如下图,这里不要做平台的更改!!
VS2013+64位win7系统ceres solver编译教程_第4张图片
4、将gfalgs生成的下图中的文件复制到前面新建的lib文件中。
VS2013+64位win7系统ceres solver编译教程_第5张图片
5、针对glog文件,进行步骤3和4同样的步骤:
VS2013+64位win7系统ceres solver编译教程_第6张图片
6、到此,lib文件夹中具有下面4个文件:
VS2013+64位win7系统ceres solver编译教程_第7张图片
8、利用cmake生成ceres,首先在 D:\ceres\ceres-solver-1.11.0中新建build文件用于存放编译结果,如图:
VS2013+64位win7系统ceres solver编译教程_第8张图片
9、点击configure,选择visual stutio 12 2013编译环境。
注意:一定要选择visual stutio 12 2013的编译环境,因为上面glog和gflags都是win32的平台编译的,所以这里一定不要选择Win64和ARM两个环境。否则,导致的直接问题就是ceres.sln无法编译成功,即使编译成功,得到的ceres.lib也是不可用的。我亲身经验就是在正确配置好lib文件的前提下,还是会出现一个LINK 2019链接的错误,因为lib文件编译环境跟使用环境不一致。
10、会有一些错误,主要是没有将eigen、gflags和glog及其编译后的lib的路径加进去导致的,加上后就可以了。
其中EIGEN_INCLUDE_DIR为D:\ceres\eigen
GLOG_INCLUDE_DIR为D:\ceres\glog-master\src\windows
GLOG_LIBRARY为D:\ceres solver\glog-master\Debug\libglog.lib
GFLAGS_INCLUDE_DIR为D:\ceres\gflags-2.0
GFLAGS_LIBRARY为D:\ceres solver\gflags-2.0\Debug\libgflags-debug.lib
configure done和generate done表示成功。
11、双击D:\ceres\ceres-solver-1.11.0\build中的ceres.sln打开,然后选择ALL_BUILD生成。
VS2013+64位win7系统ceres solver编译教程_第9张图片
过程比较耗时,半个小时左右。
可能会出现这样的错误:“error C1001: 编译器中发生内部错误”
原因是前面gflags和glog都是老版本的VS编译的,现在用的是VS2013,版本之间的切换导致了这个问题,我的解决方法是:安装VS2013的更新版本,链接如下:
http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48129(花了一个小时左右才安装完成)
安装完成后再重新编译ceres就可以了。需要分别在debug和release下分别编译,得到D:\ceres\ceres-solver-1.11.0\build\lib下的debug和release两个文件夹。
12、将上述debug和release中的lib文件复制到D:\ceres\lib
VS2013+64位win7系统ceres solver编译教程_第10张图片
并将D:\ceres\ceres-solver-1.11.0\include下的ceres文件拷贝到D:\ceres\include,如下图:
VS2013+64位win7系统ceres solver编译教程_第11张图片
至此,ceres的编译就此成功。主要结果就是include 和lib两个文件夹中的内容。

以后如果新建一个工程需要用到ceres,只需要将include和lib路径加到工程中就可以了。

参考资料:
【1】http://www.csdn123.com/html/blogs/20131113/95976.htm
【2】http://blog.csdn.net/woaik110/article/details/45970031
【3】http://www.ceres-solver.org/index.html

你可能感兴趣的:(编程语法)