首页 > 代码库 > VS2013编译VTK7.1.1
VS2013编译VTK7.1.1
1.下载VTK
从VTK官网可以下载Source,Data,以及Documentation:VTK Download
VTK安装分为binary install和source code install两种方式,binary install可以下载vtk.exe直接安装VTK,开发直接在Tcl中进行;source code install需要下载CMake进行configure/generate,开发可以使用C++,Java,Python,Tcl等任意方式,因此本文下载Source进行编译。
解压Source到D:\VTK-7.1.1。
2.安装CMake
安装CMake,参见官网:CMake
此处下载cmake-3.8.0-rc4-win64-x64.msi,并安装。
3.运行CMake对VTK进行配置
运行CMake,其界面如下:
将下载到的VTK源码文件VTK-7.1.1.zip解压到某个磁盘下,比如,解压到D:\Toolkits\VTK\VTK-7.1.1。然后,建立一个空的文件夹,叫什么名字无所谓,只要不含有中文即可(为了让文件名看起来规整统一,新建的文件夹命名为VTK-7.1.1-bin,完整的路径为:D:\Toolkits\VTK\VTK-7.1.1-bin)。接着解压下载的VTKData-7.1.1.zip文件,比如解压到:D:\Toolkits\VTK\VTK-7.1.1 (如果你没有下载VTKData-7.1.1.zip文件,这一步也可以跳过)。
配置源代码路径和目标路径,在CMake界面上的“Where is the source code”文本框里输入前一步解压VTK-7.1.1.zip之后的路径,即D:\Toolkits\VTK\VTK-7.1.1。也就是这个文本框应该输入VTK源码目录里最外层的CMakeLists.txt文件所在的路径。接着,在“Where to build the binaries”文本框里输入前一步新建的空文件夹的路径,即D:\Toolkits\VTK\VTK-7.1.1-bin,这个文本框所输的路径可以跟“Where is the source code”的一样,分开两个不同的路径的好处是后续编译过程生成的文件不会跟VTK的源码混合在一起,避免对源码目录的“污染”,这也是后续内容介绍的CMake的“in-place”和“out-of-place”的区别。
配置好源代码路径和目标路径后的CMake如下图所示:
以上两个文本框输入完之后,按“Configure”按钮,会弹出如下图所示的对话框,在Specify the generator for this project处选择Visual Studio 12 2013 Win64:
点Finish,回CMake的主界面,CMake即开始根据具体的平台环境配置VTK工程,配置时间会因硬件配置的不同而不同,一般需要几分钟时间。
选择Visual Studio 12 2013 Win64作为Current Generator,点击Configure,会出来红色的扫描结果,根据自己需要对其中的选项进行勾选,对其中一些选项进行说明:
CMAKE_INSTALL_PREFIX为默认安装路径,也是INSTALL工程生成的地方,可以选择D:/VTK-7.1.0-build/。
BUILD推荐勾选如下:
INSTALL选项下的内容不用管,默认值就行。
如果需要使用Python,需要勾选VTK_WRAP_PYHTON,并在PYTHON选项下配置好相关路径,否则会出现CMake Could NOT find PythonLibs错误,PYTHON选项配置如下:
其中INCLUDE_DIR是再次Configure之后出现的。
系统中配置好QT的环境变量QTDIR,并在PATH中加入%QTDIR%/bin,则QT部分选项默认即可。
根据需要对VTK_Group进行勾选:
修改完成后重新Configure,然后Generate。
3.生成VTK
打开D:\VTKv7-build下的VTK.sln,右键点击ALL_BUILD,选择重新生成,该步骤耗时较长。
第一次生成后会有一些链接错误,比如打不开..\..\lib\Debug下的vtkViewsInfovisPython27D-7.1.lib文件,可能是由于生成顺序导致,因此再生成一遍,可以减少一部分错误。
生成成功后找到INSTALL项目,右击选择仅用于项目->仅生成INSTALL,会在CMAKE_INSTALL_PREFIX设置的目录下生成include目录,包含VTK需要的头文件。
4.错误解决
4.1 vtkWrappingPythonCore项目无法打开文件“python27.lib”
找到该项目,在属性中添加附加链接库D:\S\D\python-install\libs
4.2 vtkImagingMorphological项目无法打开文件“..\..\lib\Debug\vtkCommonDataModelPython27D-7.1.lib”
找到跟vtkCommonDataModel相关的项目,查看属性->链接器->高级中的导入库部分,即为该项目生成后输出的lib文件,经查看,vtkCommonDataModelPython的输出为vtkCommonDataModelPython.lib,而vtkCommonDataModelPythonD项目的输出为vtkCommonDataModelPython27D-7.1.lib,因此遇到无法打开文件Python27D-7.1.lib错误时,生成相应的PythonD项目,并且该项目的附加库要添加python\libs目录。
注:由于加入python过于繁琐,加上项目不需要python,所以取消python重新进行编译,后续所用的VTK并没有加入python。
5.运行Examples
5.1 CMake编译
运行CMake,source code处选择源代码位置,例如:D:/VTK-7.1.0/Examples/Tutorial/Step1/Cxx,build the binaries选择工程文件生成处,例如:D:/VTKCode/Step1。
第一次configure之后需要填入一些参数,其中VTK_DIR填入VTKConfig.cmake所在路径,一般情况下是安装VTK时配置的生成路径, 即为D:\VTK-7.1.0-build,CMAKE_INSTALL_PREFIX是生成INSTALL.vcxproj的地方,默认是C盘,可以修改到工程文件生成目录下,configure之后generate。
编译之后到工程文件目录下,可以找到Step1.sln,打开之后选择Cone作为启动项目进行生成,生成成功即可运行。
5.2 新建项目编译
启动VS2013,新建一个空项目,将D:/VTK-7.1.0/Examples/Tutorial/Step1/Cxx/Cone.cxx复制到新建项目的目录下,在新项目中添加Cone.cxx到源文件处。
配置项目的属性,在VC++目录下,包含目录添加生成的include文件,例如:D:\VTK-7.1.0-build\include\vtk-7.1,库目录添加lib文件,例如:D:\VTK-7.1.0-build\lib。
链接器的附加依赖项填入lib目录下的所有.lib文件,如下所示:
[plain] view plain copy
print?
- kernel32.lib
- user32.lib
- gdi32.lib
- winspool.lib
- shell32.lib
- ole32.lib
- oleaut32.lib
- uuid.lib
- comdlg32.lib
- advapi32.lib
- comctl32.lib
- vfw32.lib
- ws2_32.lib
- wsock32.lib
- opengl32.lib
- vtkalglib-7.1.lib
- vtkChartsCore-7.1.lib
- vtkCommonColor-7.1.lib
- vtkCommonComputationalGeometry-7.1.lib
- vtkCommonCore-7.1.lib
- vtkCommonDataModel-7.1.lib
- vtkCommonExecutionModel-7.1.lib
- vtkCommonMath-7.1.lib
- vtkCommonMisc-7.1.lib
- vtkCommonSystem-7.1.lib
- vtkCommonTransforms-7.1.lib
- vtkDICOMParser-7.1.lib
- vtkDomainsChemistry-7.1.lib
- vtkDomainsChemistryOpenGL2-7.1.lib
- vtkexoIIc-7.1.lib
- vtkexpat-7.1.lib
- vtkFiltersAMR-7.1.lib
- vtkFiltersCore-7.1.lib
- vtkFiltersExtraction-7.1.lib
- vtkFiltersFlowPaths-7.1.lib
- vtkFiltersGeneral-7.1.lib
- vtkFiltersGeneric-7.1.lib
- vtkFiltersGeometry-7.1.lib
- vtkFiltersHybrid-7.1.lib
- vtkFiltersHyperTree-7.1.lib
- vtkFiltersImaging-7.1.lib
- vtkFiltersModeling-7.1.lib
- vtkFiltersParallel-7.1.lib
- vtkFiltersParallelImaging-7.1.lib
- vtkFiltersPoints-7.1.lib
- vtkFiltersProgrammable-7.1.lib
- vtkFiltersSelection-7.1.lib
- vtkFiltersSMP-7.1.lib
- vtkFiltersSources-7.1.lib
- vtkFiltersStatistics-7.1.lib
- vtkFiltersTexture-7.1.lib
- vtkFiltersVerdict-7.1.lib
- vtkfreetype-7.1.lib
- vtkGeovisCore-7.1.lib
- vtkgl2ps-7.1.lib
- vtkglew-7.1.lib
- vtkGUISupportQt-7.1.lib
- vtkGUISupportQtSQL-7.1.lib
- vtkhdf5_hl-7.1.lib
- vtkhdf5-7.1.lib
- vtkImagingColor-7.1.lib
- vtkImagingCore-7.1.lib
- vtkImagingFourier-7.1.lib
- vtkImagingGeneral-7.1.lib
- vtkImagingHybrid-7.1.lib
- vtkImagingMath-7.1.lib
- vtkImagingMorphological-7.1.lib
- vtkImagingSources-7.1.lib
- vtkImagingStatistics-7.1.lib
- vtkImagingStencil-7.1.lib
- vtkInfovisCore-7.1.lib
- vtkInfovisLayout-7.1.lib
- vtkInteractionImage-7.1.lib
- vtkInteractionStyle-7.1.lib
- vtkInteractionWidgets-7.1.lib
- vtkIOAMR-7.1.lib
- vtkIOCore-7.1.lib
- vtkIOEnSight-7.1.lib
- vtkIOExodus-7.1.lib
- vtkIOExport-7.1.lib
- vtkIOGeometry-7.1.lib
- vtkIOImage-7.1.lib
- vtkIOImport-7.1.lib
- vtkIOInfovis-7.1.lib
- vtkIOLegacy-7.1.lib
- vtkIOLSDyna-7.1.lib
- vtkIOMINC-7.1.lib
- vtkIOMovie-7.1.lib
- vtkIONetCDF-7.1.lib
- vtkIOParallel-7.1.lib
- vtkIOParallelXML-7.1.lib
- vtkIOPLY-7.1.lib
- vtkIOSQL-7.1.lib
- vtkIOTecplotTable-7.1.lib
- vtkIOVideo-7.1.lib
- vtkIOXML-7.1.lib
- vtkIOXMLParser-7.1.lib
- vtkjpeg-7.1.lib
- vtkjsoncpp-7.1.lib
- vtklibxml2-7.1.lib
- vtkLocalExample-7.1.lib
- vtkmetaio-7.1.lib
- vtkNetCDF_cxx-7.1.lib
- vtkNetCDF-7.1.lib
- vtkoggtheora-7.1.lib
- vtkParallelCore-7.1.lib
- vtkpng-7.1.lib
- vtkproj4-7.1_d.lib
- vtkRenderingAnnotation-7.1.lib
- vtkRenderingContext2D-7.1.lib
- vtkRenderingContextOpenGL2-7.1.lib
- vtkRenderingCore-7.1.lib
- vtkRenderingFreeType-7.1.lib
- vtkRenderingGL2PSOpenGL2-7.1.lib
- vtkRenderingImage-7.1.lib
- vtkRenderingLabel-7.1.lib
- vtkRenderingLOD-7.1.lib
- vtkRenderingOpenGL2-7.1.lib
- vtkRenderingQt-7.1.lib
- vtkRenderingVolume-7.1.lib
- vtkRenderingVolumeOpenGL2-7.1.lib
- vtksqlite-7.1.lib
- vtksys-7.1.lib
- vtkTestingGenericBridge-7.1.lib
- vtkTestingIOSQL-7.1.lib
- vtkTestingRendering-7.1.lib
- vtktiff-7.1.lib
- vtkverdict-7.1.lib
- vtkViewsContext2D-7.1.lib
- vtkViewsCore-7.1.lib
- vtkViewsInfovis-7.1.lib
- vtkViewsQt-7.1.lib
- vtkzlib-7.1.lib
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib comctl32.lib vfw32.lib ws2_32.lib wsock32.lib opengl32.lib vtkalglib-7.1.lib vtkChartsCore-7.1.lib vtkCommonColor-7.1.lib vtkCommonComputationalGeometry-7.1.lib vtkCommonCore-7.1.lib vtkCommonDataModel-7.1.lib vtkCommonExecutionModel-7.1.lib vtkCommonMath-7.1.lib vtkCommonMisc-7.1.lib vtkCommonSystem-7.1.lib vtkCommonTransforms-7.1.lib vtkDICOMParser-7.1.lib vtkDomainsChemistry-7.1.lib vtkDomainsChemistryOpenGL2-7.1.lib vtkexoIIc-7.1.lib vtkexpat-7.1.lib vtkFiltersAMR-7.1.lib vtkFiltersCore-7.1.lib vtkFiltersExtraction-7.1.lib vtkFiltersFlowPaths-7.1.lib vtkFiltersGeneral-7.1.lib vtkFiltersGeneric-7.1.lib vtkFiltersGeometry-7.1.lib vtkFiltersHybrid-7.1.lib vtkFiltersHyperTree-7.1.lib vtkFiltersImaging-7.1.lib vtkFiltersModeling-7.1.lib vtkFiltersParallel-7.1.lib vtkFiltersParallelImaging-7.1.lib vtkFiltersPoints-7.1.lib vtkFiltersProgrammable-7.1.lib vtkFiltersSelection-7.1.lib vtkFiltersSMP-7.1.lib vtkFiltersSources-7.1.lib vtkFiltersStatistics-7.1.lib vtkFiltersTexture-7.1.lib vtkFiltersVerdict-7.1.lib vtkfreetype-7.1.lib vtkGeovisCore-7.1.lib vtkgl2ps-7.1.lib vtkglew-7.1.lib vtkGUISupportQt-7.1.lib vtkGUISupportQtSQL-7.1.lib vtkhdf5_hl-7.1.lib vtkhdf5-7.1.lib vtkImagingColor-7.1.lib vtkImagingCore-7.1.lib vtkImagingFourier-7.1.lib vtkImagingGeneral-7.1.lib vtkImagingHybrid-7.1.lib vtkImagingMath-7.1.lib vtkImagingMorphological-7.1.lib vtkImagingSources-7.1.lib vtkImagingStatistics-7.1.lib vtkImagingStencil-7.1.lib vtkInfovisCore-7.1.lib vtkInfovisLayout-7.1.lib vtkInteractionImage-7.1.lib vtkInteractionStyle-7.1.lib vtkInteractionWidgets-7.1.lib vtkIOAMR-7.1.lib vtkIOCore-7.1.lib vtkIOEnSight-7.1.lib vtkIOExodus-7.1.lib vtkIOExport-7.1.lib vtkIOGeometry-7.1.lib vtkIOImage-7.1.lib vtkIOImport-7.1.lib vtkIOInfovis-7.1.lib vtkIOLegacy-7.1.lib vtkIOLSDyna-7.1.lib vtkIOMINC-7.1.lib vtkIOMovie-7.1.lib vtkIONetCDF-7.1.lib vtkIOParallel-7.1.lib vtkIOParallelXML-7.1.lib vtkIOPLY-7.1.lib vtkIOSQL-7.1.lib vtkIOTecplotTable-7.1.lib vtkIOVideo-7.1.lib vtkIOXML-7.1.lib vtkIOXMLParser-7.1.lib vtkjpeg-7.1.lib vtkjsoncpp-7.1.lib vtklibxml2-7.1.lib vtkLocalExample-7.1.lib vtkmetaio-7.1.lib vtkNetCDF_cxx-7.1.lib vtkNetCDF-7.1.lib vtkoggtheora-7.1.lib vtkParallelCore-7.1.lib vtkpng-7.1.lib vtkproj4-7.1_d.lib vtkRenderingAnnotation-7.1.lib vtkRenderingContext2D-7.1.lib vtkRenderingContextOpenGL2-7.1.lib vtkRenderingCore-7.1.lib vtkRenderingFreeType-7.1.lib vtkRenderingGL2PSOpenGL2-7.1.lib vtkRenderingImage-7.1.lib vtkRenderingLabel-7.1.lib vtkRenderingLOD-7.1.lib vtkRenderingOpenGL2-7.1.lib vtkRenderingQt-7.1.lib vtkRenderingVolume-7.1.lib vtkRenderingVolumeOpenGL2-7.1.lib vtksqlite-7.1.lib vtksys-7.1.lib vtkTestingGenericBridge-7.1.lib vtkTestingIOSQL-7.1.lib vtkTestingRendering-7.1.lib vtktiff-7.1.lib vtkverdict-7.1.lib vtkViewsContext2D-7.1.lib vtkViewsCore-7.1.lib vtkViewsInfovis-7.1.lib vtkViewsQt-7.1.lib vtkzlib-7.1.lib需要注意的是,本次配置并未将.dll文件复制到C:\Windows\System32或者C:\Windows\SysWOW64下,如果是WIN7则需要复制,本机系统是WIN10,只在Path中添加了VTK的.dll文件所在目录。
由于本机系统是64位系统,VTK.sln编译的时候也选择的是Debug x64,因此新建的项目应在配置管理器中将活动解决方案平台换成x64方可生成成功。
运行Cone,出现Error: no override found for ‘vtkPolyDataMapper‘.错误,经查找资料,由于未使用CMake进行配置,因此需要在源代码开头加入如下代码:
[cpp] view plain copy
print?
- #include <vtkAutoInit.h>
- VTK_MODULE_INIT(vtkRenderingOpenGL2);
- VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);该方法适用于VTK7.0及以上版本,其他版本可参考下列资料:
VTK/VTK 6 Migration/Factories now require defines
VTK/Build System Migration
6.参考资料
VTK入门(配置+常见问题)
VTK在VS2010中的安装(含python)和第一个例子
VTK与ITK的详细安装指南
ITK + VTK + QT on Window 7 64bit and Visual Studio 2010 Pro 32bit projectVS2013编译VTK7.1.1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。