Windows10 + VS2015 (Win SDK10)環境下的64位 VTK編譯小結


之前在學習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編譯成功了,可以好好學習了。。。^_^


免責聲明!

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



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