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工程,配置時間會因硬件配置的不同而不同,一般需要幾分鍾時間。

 配置完成后,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,選擇重新生成,該步驟耗時較長。
第一次生成后會有一些鏈接錯誤,比如打不開..\..\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?
  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:\Windows\System32或者C:\Windows\SysWOW64下,如果是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及以上版本,其他版本可參考下列資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM