1. 程式人生 > >Visual Studio 2013編譯VTK7.1.0

Visual Studio 2013編譯VTK7.1.0

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.0。 安裝CMake,參見官網:CMake

2.執行CMake對VTK進行配置

執行CMake,並配置原始碼路徑和目標路徑:
選擇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檔案,如下所示:
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進行配置,因此需要在原始碼開頭加入如下程式碼:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
該方法適用於VTK7.0及以上版本,其他版本可參考下列資料: