之前在学习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编译成功了,可以好好学习了。。。^_^

最新文章

  1. IOS网络第七天WebView-03js中调用webView中的代码
  2. 使用 antd Table组件, 异步获取数据
  3. SecWeek
  4. AsyncTask和Handler对比(转)
  5. 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
  6. web.xml中webAppRootKey
  7. ASP.NET中DesignMode属性
  8. jQuery分页插件jBootstrapPage,一个Bootstrap风格的分页插件
  9. MapReduce UnitTest
  10. 7种方法解决移动端Retina屏幕1px边框问题
  11. ;。【】DAY14、递归,匿名函数
  12. ArcGIS JS API4 With VueJS集成开发
  13. 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?
  14. android开发默认图标怎么换?
  15. pyqt5.0 GraphicsView框架
  16. 分步理解 Promise 的实现
  17. 利用OpenLayers创建wkt字符串
  18. 没有添加spring mvc 默认依赖包产生的错误
  19. 25 个常用的 Linux iptables 规则【转】
  20. 最全最详细的用JS过滤Emoji表情的输入

热门文章

  1. Spring MVC 中使用AOP 进行事务管理--注解实现
  2. python简介与简单入门
  3. 模板渲染JinJa2
  4. python-day14(正式学习)
  5. python 3 :list
  6. js数组与对象的区别
  7. poj 1543 Perfect Cubes (暴搜)
  8. 安装与学习laravel
  9. Linux20期学习笔记 Day1
  10. HTTP/1.1-HTTP/2.0-HTTP/3.0-HTTPS