• 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:ToolkitsVTKVTK-7.1.1。然后,建立一个空的文件夹,叫什么名字无所谓,只要不含有中文即可(为了让文件名看起来规整统一,新建的文件夹命名为VTK-7.1.1-bin,完整的路径为:D:ToolkitsVTKVTK-7.1.1-bin)。接着解压下载的VTKData-7.1.1.zip文件,比如解压到:D:ToolkitsVTKVTK-7.1.1 (如果你没有下载VTKData-7.1.1.zip文件,这一步也可以跳过)。 配置源代码路径和目标路径,在CMake界面上的“Where is the source code”文本框里输入前一步解压VTK-7.1.1.zip之后的路径,即D:ToolkitsVTKVTK-7.1.1。也就是这个文本框应该输入VTK源码目录里最外层的CMakeLists.txt文件所在的路径。接着,在“Where to build the binaries”文本框里输入前一步新建的空文件夹的路径,即D:ToolkitsVTKVTK-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工程,配置时间会因硬件配置的不同而不同,一般需要几分钟时间。

     配置完成后,CMake界面如下图所示:

    Configure完成后会出来红色的扫描结果,根据自己需要对其中的选项进行勾选。

    关于VTK的一些CMake配置选项的说明:

    BUILD_EXAMPLES —默认是关闭的,如果打开这个选项,则会编译VTK例子,同时VTK编译所需的时间也较长,占用的磁盘空间也较大。对于初学者来说,建议把这个选项打开。

    BUILD_SHARED_LIBS —默认是关闭的,意味着VTK是静态编译;如果打开这个选项,则是动态编译。

    “静态编译”与“动态编译”的区别:静态编译就是在编译的时候把所有的模块都编译进可执行文件(exe)里去,当启动这个可执行文件时所有的模块都已加载进来。动态编译则是编译的时候需要的模块都没有编译进去,一般情况下可以把这些模块都编译成动态链接库DLL,启动程序(初始化)的时候这些模块不会被加载,运行的时候用到那个模块就调用哪个DLL文件。静态链接库编译相当于你带着一个工具包到处跑,遇到有需要的地方不需要周围的环境提供相应的工具,自己用自己工具包的工具就行了,所以当环境发生变化可以尽可能的无视;动态链接库编译相当于不带任何东西,走到哪是哪。这两者的区别显然就是前者重量增加了,即程序的体积会比后者的大。

    所以,究竟是用“静态编译”还是“动态编译”,关键看自己的需要。对于VTK初学者而言,所涉及到的工程可能都比较小,建议用“静态编译”,也方便把VTK程序移植到其他没有安装VTK的计算机上运行。本书的VTK类库是采用静态编译。

    BUILD_TESTING —默认是打开的,表示会编译VTK的测试程序。VTK里每个类都有对应的程序文件对该类进行测试,对于初学者而言,可以关闭掉这个选项,后续如有需要,可以再打开此选项。

    VTK_DATA_ROOT —指向VTKData所在的路径,即第1章里下载的文件vtkdata-5.10.0.zip解压后的路径。一般情况下,VTK能够自动搜索到,如果没有搜索到可以手动输入,在运行VTK的例子时需要用到这些数据。

    CMAKE_INSTALL_PREFIX —这个选项表示VTK的安装路径,默认的路径是:C:/Program Files/VTK。该选项的值可不作更改,按默认值即可。

    VTK_USE_QT —是否使用Qt。在这个系列里,我们使用Qt作为GUI开发工具,所以勾上该选项。

    VTK_WRAP_JAVAVTK_WRAP_PYTHONVTK_WRAP_TCL —这三个选项是供准备使用Java、Python或者Tcl语言开发VTK工程的用户选择的。VTK由两个子系统组成,分别是C++类库和提供给Java、Tcl和Python来操作该类库的解释器工具,如果勾上以上三个选项,即会编译这些解释器工具。

    勾选图2.3的“Advance”复选框,可以在CMake界面上看到更多的选项,各选项分别表示什么意思,可以把鼠标在该选项名字停留片刻,即会弹出关于该选项的提示信息。另外“Advance”视图下以下几个选项需要说明一下:

    BUILD_DOCUMENTATION —默认是关闭的,如果打开这个选项,则会编译VTK帮助文档,由于这个文档VTK已提供下载,所以可以不选。

    VTK_USE_GUISUPPORT — VTK是否支持GUI,Windows下如果需要使用MFC开发的,需要勾选上这个选项。本教程在演示的时候也会把这个选项勾选,如果你确定不使用MFC,可以不用选择该选项。

    定制每个选项的值以后,按“Configure”按钮,继续配置,CMake界面如图2.4所示。

    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,选择重新生成,该步骤耗时较长。
    第一次生成后会有一些链接错误,比如打不开....libDebug下的vtkViewsInfovisPython27D-7.1.lib文件,可能是由于生成顺序导致,因此再生成一遍,可以减少一部分错误。
    生成成功后找到INSTALL项目,右击选择仅用于项目->仅生成INSTALL,会在CMAKE_INSTALL_PREFIX设置的目录下生成include目录,包含VTK需要的头文件。

    4.错误解决

    4.1 vtkWrappingPythonCore项目无法打开文件“python27.lib”

    找到该项目,在属性中添加附加链接库D:SDpython-installlibs

    4.2 vtkImagingMorphological项目无法打开文件“....libDebugvtkCommonDataModelPython27D-7.1.lib”

    找到跟vtkCommonDataModel相关的项目,查看属性->链接器->高级中的导入库部分,即为该项目生成后输出的lib文件,经查看,vtkCommonDataModelPython的输出为vtkCommonDataModelPython.lib,而vtkCommonDataModelPythonD项目的输出为vtkCommonDataModelPython27D-7.1.lib,因此遇到无法打开文件Python27D-7.1.lib错误时,生成相应的PythonD项目,并且该项目的附加库要添加pythonlibs目录。
     
    注:由于加入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-buildincludevtk-7.1,库目录添加lib文件,例如:D:VTK-7.1.0-buildlib。
    链接器的附加依赖项填入lib目录下的所有.lib文件,如下所示:
    1. kernel32.lib  
    2. user32.lib  
    3. gdi32.lib  
    4. winspool.lib  
    5. shell32.lib  
    6. ole32.lib  
    7. oleaut32.lib  
    8. uuid.lib  
    9. comdlg32.lib  
    10. advapi32.lib  
    11. comctl32.lib  
    12. vfw32.lib  
    13. ws2_32.lib  
    14. wsock32.lib  
    15. opengl32.lib  
    16. vtkalglib-7.1.lib  
    17. vtkChartsCore-7.1.lib  
    18. vtkCommonColor-7.1.lib  
    19. vtkCommonComputationalGeometry-7.1.lib  
    20. vtkCommonCore-7.1.lib  
    21. vtkCommonDataModel-7.1.lib  
    22. vtkCommonExecutionModel-7.1.lib  
    23. vtkCommonMath-7.1.lib  
    24. vtkCommonMisc-7.1.lib  
    25. vtkCommonSystem-7.1.lib  
    26. vtkCommonTransforms-7.1.lib  
    27. vtkDICOMParser-7.1.lib  
    28. vtkDomainsChemistry-7.1.lib  
    29. vtkDomainsChemistryOpenGL2-7.1.lib  
    30. vtkexoIIc-7.1.lib  
    31. vtkexpat-7.1.lib  
    32. vtkFiltersAMR-7.1.lib  
    33. vtkFiltersCore-7.1.lib  
    34. vtkFiltersExtraction-7.1.lib  
    35. vtkFiltersFlowPaths-7.1.lib  
    36. vtkFiltersGeneral-7.1.lib  
    37. vtkFiltersGeneric-7.1.lib  
    38. vtkFiltersGeometry-7.1.lib  
    39. vtkFiltersHybrid-7.1.lib  
    40. vtkFiltersHyperTree-7.1.lib  
    41. vtkFiltersImaging-7.1.lib  
    42. vtkFiltersModeling-7.1.lib  
    43. vtkFiltersParallel-7.1.lib  
    44. vtkFiltersParallelImaging-7.1.lib  
    45. vtkFiltersPoints-7.1.lib  
    46. vtkFiltersProgrammable-7.1.lib  
    47. vtkFiltersSelection-7.1.lib  
    48. vtkFiltersSMP-7.1.lib  
    49. vtkFiltersSources-7.1.lib  
    50. vtkFiltersStatistics-7.1.lib  
    51. vtkFiltersTexture-7.1.lib  
    52. vtkFiltersVerdict-7.1.lib  
    53. vtkfreetype-7.1.lib  
    54. vtkGeovisCore-7.1.lib  
    55. vtkgl2ps-7.1.lib  
    56. vtkglew-7.1.lib  
    57. vtkGUISupportQt-7.1.lib  
    58. vtkGUISupportQtSQL-7.1.lib  
    59. vtkhdf5_hl-7.1.lib  
    60. vtkhdf5-7.1.lib  
    61. vtkImagingColor-7.1.lib  
    62. vtkImagingCore-7.1.lib  
    63. vtkImagingFourier-7.1.lib  
    64. vtkImagingGeneral-7.1.lib  
    65. vtkImagingHybrid-7.1.lib  
    66. vtkImagingMath-7.1.lib  
    67. vtkImagingMorphological-7.1.lib  
    68. vtkImagingSources-7.1.lib  
    69. vtkImagingStatistics-7.1.lib  
    70. vtkImagingStencil-7.1.lib  
    71. vtkInfovisCore-7.1.lib  
    72. vtkInfovisLayout-7.1.lib  
    73. vtkInteractionImage-7.1.lib  
    74. vtkInteractionStyle-7.1.lib  
    75. vtkInteractionWidgets-7.1.lib  
    76. vtkIOAMR-7.1.lib  
    77. vtkIOCore-7.1.lib  
    78. vtkIOEnSight-7.1.lib  
    79. vtkIOExodus-7.1.lib  
    80. vtkIOExport-7.1.lib  
    81. vtkIOGeometry-7.1.lib  
    82. vtkIOImage-7.1.lib  
    83. vtkIOImport-7.1.lib  
    84. vtkIOInfovis-7.1.lib  
    85. vtkIOLegacy-7.1.lib  
    86. vtkIOLSDyna-7.1.lib  
    87. vtkIOMINC-7.1.lib  
    88. vtkIOMovie-7.1.lib  
    89. vtkIONetCDF-7.1.lib  
    90. vtkIOParallel-7.1.lib  
    91. vtkIOParallelXML-7.1.lib  
    92. vtkIOPLY-7.1.lib  
    93. vtkIOSQL-7.1.lib  
    94. vtkIOTecplotTable-7.1.lib  
    95. vtkIOVideo-7.1.lib  
    96. vtkIOXML-7.1.lib  
    97. vtkIOXMLParser-7.1.lib  
    98. vtkjpeg-7.1.lib  
    99. vtkjsoncpp-7.1.lib  
    100. vtklibxml2-7.1.lib  
    101. vtkLocalExample-7.1.lib  
    102. vtkmetaio-7.1.lib  
    103. vtkNetCDF_cxx-7.1.lib  
    104. vtkNetCDF-7.1.lib  
    105. vtkoggtheora-7.1.lib  
    106. vtkParallelCore-7.1.lib  
    107. vtkpng-7.1.lib  
    108. vtkproj4-7.1_d.lib  
    109. vtkRenderingAnnotation-7.1.lib  
    110. vtkRenderingContext2D-7.1.lib  
    111. vtkRenderingContextOpenGL2-7.1.lib  
    112. vtkRenderingCore-7.1.lib  
    113. vtkRenderingFreeType-7.1.lib  
    114. vtkRenderingGL2PSOpenGL2-7.1.lib  
    115. vtkRenderingImage-7.1.lib  
    116. vtkRenderingLabel-7.1.lib  
    117. vtkRenderingLOD-7.1.lib  
    118. vtkRenderingOpenGL2-7.1.lib  
    119. vtkRenderingQt-7.1.lib  
    120. vtkRenderingVolume-7.1.lib  
    121. vtkRenderingVolumeOpenGL2-7.1.lib  
    122. vtksqlite-7.1.lib  
    123. vtksys-7.1.lib  
    124. vtkTestingGenericBridge-7.1.lib  
    125. vtkTestingIOSQL-7.1.lib  
    126. vtkTestingRendering-7.1.lib  
    127. vtktiff-7.1.lib  
    128. vtkverdict-7.1.lib  
    129. vtkViewsContext2D-7.1.lib  
    130. vtkViewsCore-7.1.lib  
    131. vtkViewsInfovis-7.1.lib  
    132. vtkViewsQt-7.1.lib  
    133. 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:WindowsSystem32或者C:WindowsSysWOW64下,如果是WIN7则需要复制,本机系统是WIN10,只在Path中添加了VTK的.dll文件所在目录。
    由于本机系统是64位系统,VTK.sln编译的时候也选择的是Debug x64,因此新建的项目应在配置管理器中将活动解决方案平台换成x64方可生成成功。
    运行Cone,出现Error: no override found for 'vtkPolyDataMapper'.错误,经查找资料,由于未使用CMake进行配置,因此需要在源代码开头加入如下代码:
    1. #include <vtkAutoInit.h>  
    2. VTK_MODULE_INIT(vtkRenderingOpenGL2);  
    3. VTK_MODULE_INIT(vtkInteractionStyle);  
    #include <vtkAutoInit.h>
    VTK_MODULE_INIT(vtkRenderingOpenGL2);
    VTK_MODULE_INIT(vtkInteractionStyle);
    该方法适用于VTK7.0及以上版本,其他版本可参考下列资料:
  • 相关阅读:
    用递归求猴子吃桃
    用结构体求平均分
    各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.3.8,留存备用:
    MyBatis Generator报错:Cannot instantiate object of type
    mybatis:数据持久层框架
    MyBatis逆向工程自动生成代码
    java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.jav
    mybatis-spring-1.2.2.jar下载地址
    Mybatis -SqlMapConfig.xml环境配置
    Mybatis-java.lang.RuntimeException: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in sqlmap/User.xml ### Cause: org.apache.ibatis.builder.B
  • 原文地址:https://www.cnblogs.com/AijunHe/p/6663885.html
Copyright © 2020-2023  润新知