1. 程式人生 > >VTK學習筆記1—VTK安裝及原始碼編譯(Winxp + VS2010 + CMake2.8.6 + VTK5.8)

VTK學習筆記1—VTK安裝及原始碼編譯(Winxp + VS2010 + CMake2.8.6 + VTK5.8)

為了安裝編譯VTK,在網上找了一些相關資料作為參考,在原始碼編譯過程中也遇到了一些問題,後解決,現在將筆記整理如下:

Winxp + VS2010 + CMake2.8.6 + VTK5.8

1、準備:
    1)下載安裝Vs2010
    2)下載安裝CMake2.8.6 (www.cmake.com
    3)下載VTK相關包:(www.vtk.org
        1.vtk-5.8.0-win32-x86.exe  (win32安裝程式)
        2.vtk-5.8.0.zip  (原始碼包)
        3.vtkdata-5.8.0.zip  (資料包)
        4.vtkDocHtml-5.8.0.tar.gz  (文件包,可下可不下)

2、為vtk的安裝新建個根資料夾,命名為"VTK5.8",在這個資料夾下新建四個資料夾,分別命名為 VTKSrc、VTKData、VTKDoc、Bin,將之前下載的原始碼包資料包文件包分別解壓到前三個資料夾中。

3、安裝vtk-5.8.0-win32-x86.exe,安裝到根資料夾 VTK5.8 下。

4、開啟CMake(CMake2.8\bin\cmake-gui.exe),
   設定:Source code目錄:F:\Dev\SDK\VTK5.8\VTKSrc 
        Build目錄:F:\Dev\SDK\VTK5.8\Bin  (目錄地址請根據自己電腦目錄做更改)
   然後configure,在彈出框中選擇VS2010作為我們的編譯器,然後Cmake自動描述需要的檔案。
   停下後,顯示紅色列表,接著開始修改cmake選項,手動勾上 
   build_shared_libs、build_examples,然後勾選cmake介面上方的Advanced,進入下一級,這時到下面重新找到vtk_use_guisupport 這一項勾選,再 configure,之後會出現 vtk_use_mfc,選擇它勾選,再一直configure,直到紅色消失。
   最後Generate,產生相應的KTV.sln 解決方案。
   
   (
      相關說明:
      1、為什麼要勾選vtk_use_mfc? 很多人把 vtk 安裝好了,卻無法執行vtk 中與mfc
       混合程式設計的例子,提示錯誤都是缺少vtkmfc.lib,問題就出在這個選項,我們必須
       把它設定為 on。
      2、vtk_use_qvtk,這是給QT用的vtk
      3、vtk_data_root: 目的是告訴cmake,vtk 需要的資料都在哪裡,我們的資料在
      F:\Dev\SDK\VTK5.8\VTKData
      4、cmake_install_prefix: 這個是指定一個目錄把.h .lib .dll等精華放在這裡,
      "VTK安裝三步曲"裡說是為將來裝vtk做準備。
      5、build_examples: 就是詢問是否編譯 vtk 中的例子,初次用VTK,選上便於
      學習。
      6、build_shared_libs: 如果設定為off,就只會生成lib檔案,用於開發肯定是
      夠了。如果設定為on,將會多生成 dll 檔案,這些dll需要拷到windows/system
      目錄下。如果用靜態庫程式設計,即off時,應用程式可以獨立執行,尺寸也比較大,
      如果用動態庫程式設計,即on時,應用程式必須找到動態庫才能執行,但尺寸可以做
      得比較小。建議選On, 我試過選OFF,所謂的靜態編譯,但之後新建一個專案時,
      還是會出現找不到檔案的問題。
      7.vtk_use_parallel: 對於想用vtk 做平行計算的朋友,要把這個選上,
      對於只想學學vtk 的,保持預設 off  
     )

5、開啟 KTV.sln ,如果使用vs2010,在編譯整個解決方案之前,需要注意:
  1)請先找到VTKSrc\GUISupport\MFC\vtkMFCWindow.cpp ,找到類似以下原始碼並修改數值如下:

#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501 // =_WIN32_WINNT_NT4
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0601 //=_WIN32_IE_IE60SP1
#endif

  2)如果之前Cmake勾選了 build_examples,工程中含有VKT的examples,僅改上面程式碼還不夠,還需要找到
  VTKSrc\Examples\GUI\Win32\vtkMFC\vtkDLG\stdafx.h
  VTKSrc\Examples\GUI\Win32\vtkMFC\vtkMDI\stdafx.h
 VTKSrc\Examples\GUI\Win32\vtkMFC\vtkSDI\stdafx.h
  VTKSrc\Examples\GUI\Win32\SampleMFC\stdafx.h
  四個檔案,每個檔案下找到類似以下原始碼並修改數值如下:

#ifndef WINVER        
#define WINVER 0x0501    
#endif

#ifndef _WIN32_WINNT    
#define _WIN32_WINNT 0x0501    
#endif            

#if _MSC_VER >= 1300
#ifndef _WIN32_WINDOWS    
#define _WIN32_WINDOWS 0x0501 
#endif
#endif

#ifndef _WIN32_IE      
#define _WIN32_IE 0x0601  
#endif

  3)如果不進行上述兩步操作,在編譯專案過程中會出現類似下面錯誤:
  fatal error C1189: #error :  This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
  
6、編譯整個解決方案。
  如果之前Cmake勾選了 build_examples,工程中含有VKT的examples,在編譯過程中,以下四個專案vtkDLG、vtkMDI、vtkSDI、Win32SampleMFC,可能還會出現類似下面的LINK連結錯誤:
error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: static class...
稱找不到vtkIO.dll

對應解決辦法:在每個專案屬性的連結器->輸入->附加依賴項中新增入vtkIO.lib庫,目錄為:..\..\..\..\bin\Debug\vtkIO.lib

就此,基本的VKT安裝及原始碼編譯結束,編譯產生的lib、dll連結庫和執行檔案都生成在VTK5.8\Bin\bin\Debug資料夾下。