Windows下使用VS2008编译RobotVision库

1、按照OpenSlam.org网站上给出的RobotVision_install_guide.txt,下载Toon、libcvd、opencv2.1和CSparse库;

2、Toon用作函数库,将其头文件包含进IDE的inlucde路径即可;

3、将libcvd按照/MD(/MDd)开关进行编译;

4、将CSparse的头文件和源文件拷贝到RobotVision对应的CSparse目录下;

5、安装Opencv2.1库;

6、配置好这些后,使用CMake工具构建RobotVision工程;

注意,在构建RobotVision工程之前,打开CMakeLists.txt文件,

并将# SET (LIB_NAMES lapack f77blas cblas atlas GL cvd  ) #jpeg png tiff 

修改为SET (LIB_NAMES lapack GL cvd  ) #jpeg png tiff ;

即删除对f77blas cblas atlas等数学库的依赖;

7、使用CMake构建RobotVision工程后,依赖lapack,gl,cvd,opencv等第三方开源库,

在工程属性的链接依赖项中添加这些依赖库(Debug/Release);

并将RobotVision工程的配置类型由动态库(.dll)修改为静态库(.lib);

8、编译时,首先会提示sparse_matrix.h文件中uint无定义的错误,这是因为uint类型在Linux开发环境下,

是定义在系统文件中的。在Windows环境下,需要在此文件开头重新定义:typedef unsigned int uint;

9、由于RobotVision中的三维显示窗口,封装了OpenGL,因此在gui_view.cpp文件中包含了#include <GL/gl.h>,

但是windows平台下使用Opengl进行开发,需要在包含#include <GL/gl.h>之前包含#include <windows.h>,

这样才能解决编译gl.h时产生的错误;

10、由于windows_sdk中只带有gl.h和glu.h,没有glext.h文件,

所以在gui_view.cpp文件中包含的#include <GL/glext.h>,就无法找到此文件;

从网上下载glext.h文件,并将其拷贝到gl目录下,可以解决无法找到glext.h文件的编译错误;

11、在opencv_helper.cpp文件中,图片类型采用了byte类型,导致类型定义模糊,

需将byte类型修改为CVD::byte,消除错误;

12、在rectangle.h中使用了std::max 和std::min函数,标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max()。

在 Visual C++ 中无法使用它们,因为没有定义这些函数模板。其名字min和max与<windows.h>中传统的min/max宏定义有冲突。

解决方案:在工程“属性配置”中选择=>“C/C++”=>“预处理器”=>右边“预处理器定义”处加上“NOMINMAX”,便禁用了Visual C++中的 min/max宏定义,

也可以在包含<windows.h>头文件之前加上:#define NOMINMAX ;

13、至此,编译就没有错误了,

但是链接时,如果不小心,比如:libcvd或lapack采用的运行时库与robotvision不一致时,会导致模块重定义的链接错误;

因此,在编译RobotVision时,对所以来的第三方库,我都选用/MD(/MDd)开关,以保持一致性;

14、编译完成RobotVision库之后,继续编译其自带的两个Demo程序:ba_demo和rss2010_demo;

在ba_demo.cpp和rss2010_demo.cpp文件中使用了Linux系统函数usleep函数,实现对进程的睡眠效果,

在windows平台下,需要修改为Sleep()函数;

15、在编译两个demo的过程中,在graph_optimizer.h和bundle_adjuster.h文件中出现了isnan函数无定义的错误;

究其原因是VC++开发环境正在逐渐向C99标准靠近,isnan是定义在C99标准中的函数,若要使用还函数,

可以在文件起始处定义如下:#define isnan(x) ((x) != (x));

16、编译ba_demo时需要依赖opengl,libcvd,lapack,blas和robotvision等第三方库;

编译rss2010_demo时需要依赖opengl,libcvd,lapack,blas,opencv和robotvision等第三方库;

17、搞定!!demo程序编译通过,release版本运行效果良好,(ps:rss2010_demo中figure 2程序无法运行)

Debug版本运行时需要依赖libifcoremdd.dll库,貌似是和fortran相关的,搞不懂。

不过release可以运行就OK了。^_^

你可能感兴趣的:(Algorithm,windows,rss,byte,fortran,tiff)