Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误。但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦。经过一番折腾之后,终于将vtkbian编译成功了,这里做个小结,希望对大家有所帮助。

Step 1: 使用cmake3.3.0对vtk-6.2.0源码进行configure操作

选择VS2015 Win64选项作为编译器设置

可能出现的错误:HDF5对64位位长数据支持检测失败

解决方案:这个是因为在HDF5配置源码文件中缺少I64这个选项,添加I64选项即可解决

Step 2:使用cmake3.3.0对vtk-6.2.0源码进行generate操作,生成vs工程

这里我在默认配置的基础上勾选了BUILD_EXAMPLES和Module_vtkGUISupportMFC选项(因为我在开发的过程中会用到)

Step 3:以管理员方式打开VS2015,打开对应的sln文件

错误一:

19>D:\Softwares\vtk\VTK-6.2.0\Common\Core\vtkWin32ProcessOutputWindow.cxx(98): error C3688: 文本后缀"PRIdword"无效;未找到文文本运算符或文本运算符模板"operator """"PRIdword"

19>D:\Softwares\vtk\VTK-6.2.0\Common\Core\vtkWin32ProcessOutputWindow.cxx(99): error C2664: "int sprintf(char *const ,const char *const ,...)": 无法将参数 2 从"DWORD"转换为"const char *const "

19> D:\Softwares\vtk\VTK-6.2.0\Common\Core\vtkWin32ProcessOutputWindow.cxx(99): note: 从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换

解决方案:在D:\Softwares\vtk\VTK-6.2.0\Common\Core\vtkWin32ProcessOutputWindow.cxx第99行处进行如下修改:

//sprintf(exeName, "vtkWin32OWP_%"PRIdword"_%p_%u.exe",GetCurrentProcessId(), this, this->Count++);

sprintf(exeName, "vtkWin32OWP_%u_%p_%u.exe", GetCurrentProcessId(), this, this->Count++);

也就是将"PRIdword"替换为u。

错误二:

12>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt\corecrt_search.h(191): error C2375: "lfind": 重定义;不同的链接

12> d:\softwares\vtk\vtk-6.2.0\thirdparty\tiff\vtktiff\tiffiop.h(57): note: 参见"lfind"的声明

解决方案:在d:\softwares\vtk\vtk-6.2.0\thirdparty\tiff\vtktiff\tiffiop.h中第57行处作如下修改:

在#ifdef HAVE_SEARCH_H 前面添加宏定义 #define HAVE_SEARCH_H。

错误三:

22>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt\stdio.h(1925): warning C4005: "snprintf": 宏重定义

22> D:\Softwares\vtk-build\ThirdParty\libxml2\vtklibxml2\config.h(254): note: 参见"snprintf"的前一个定义

22>C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt\stdio.h(1927): fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration

解决方案:

在D:\Softwares\vtk-build\ThirdParty\libxml2\vtklibxml2\config.h中第252行处进行如下修改:

/* Win32 Std C name mangling work-around */

//#if defined(_MSC_VER)

//# define snprintf _snprintf

//#endif

即将此处的宏定义注释掉,因为在VS2015中已经对snprintf提供了官方支持

 

在分别对ALL_BUILD和INSTALL进行生成操作后,结果如下:

好了,vtk编译成功了,可以好好学习了。。。^_^

posted @ 2016-01-22 07:56  litengyao  阅读(14418)  评论(0编辑  收藏  举报