编译PTAM,弄了一天,终于搞定了。记录一下。
平台说明:Windows XP, VS2008
首先编译libCVD库:
1、依赖toon库,toon作为一个头文件包包含进工程include目录即可;2、toon/internal/config.hh 只保留#define TOON_USE_LAPACK 1这一项即可;(使用lapack和Blas的/MT选项的库,^_^)3、删除libcvd工程下的附加包含目录中的"$(includedir)"和附加库目录中的"$(libdir)";4、编译cvdimage.cxx文件时,其包含了#include<array>语句,其中array类型定义在Visual Studio 2008SP1中,但是也可以用boost来替代,如下所示://#include <array>#include <boost/array.hpp>using namespace boost;5、添加对png图片的支持,在cvd目录下的config.h文件中添加:#ifndef CVD_DISABLE_PNG #define CVD_HAVE_PNG 1#endif6、添加png.cc文件到工程目录Source Files->pnm_src中;7、编译时,选择/MT(/MTD)选项,使用多线程静态库进行编译;8、编译通过,生成了libcvd.lib和libcvdd.lib文件;
然后在编译gvars3:
1、在gvars3工程下移除fltk支持:
GUI_Fltk2.h
GUI_Fltk2.cc
2、在gvars3目录下创建config.h文件:
#ifndef GVARS3_INCLUDE_CONFIG_H
#define GVARS3_INCLUDE_CONFIG_H
#define GVARS3_HAVE_TOON 1
#endif
3、在工程的附加包含目录中仅保留../..即可;
4、编译时会产生error C2064: 项不计算0个参数的函数;
做以下替换即可:
//template<class T> static T& get(const std::string& name, const T& default_val=DefaultValue<T>::val(), int flags=0);
template<class T> static T& get(const std::string& name, const T& default_val=T(), int flags=0);
最后编译PTAM库:
1、将PTAM/Build/Win32目录下的所有文件拷贝到PTAM目录下,打开解决方案文件;
2、将libCVD和GVars的include目录和lib目录包含到PTAM解决方案中;
3、编译时需要将SymEigen.h文件中的
ev = makeVector(A_plus_B, -A_plus_B/2 + A_minus_B * sqrt(3)/2, -A_p