編譯VTK的MFC庫

原文連接:http://blog.csdn.net/left_la/article/details/7069708編程

本人作了少許修改!windows


Win7 + VS2010 + CMake2.8.6 + VTK5.8學習

一、準備:
    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  (文檔包,可下可不下)

二、爲vtk的安裝新建個根文件夾,命名爲"VTK5.8",在這個文件夾下新建四個文件夾,分別命名爲 VTKSrc、VTKData、VTKDoc、Bin,將以前下載的源碼包數據包文檔包分別解壓到前三個文件夾中。

三、安裝vtk-5.8.0-win32-x86.exe,安裝到根文件夾 VTK5.8 下。

四、打開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 解決方案。
   
   (
      相關說明:
      一、爲何要勾選vtk_use_mfc? 不少人把 vtk 安裝好了,卻沒法運行vtk 中與mfc
       混合編程的例子,提示錯誤都是缺乏vtkmfc.lib,問題就出在這個選項,咱們必須
       把它設置爲 on。
      二、vtk_use_qvtk,這是給QT用的vtk
      三、vtk_data_root: 目的是告訴cmake,vtk 須要的數據都在哪裏,咱們的數據在
      F:\Dev\SDK\VTK5.8\VTKData
      四、cmake_install_prefix: 這個是指定一個目錄把.h .lib .dll等精華放在這裏,
      "VTK安裝三步曲"裏說是爲未來裝vtk作準備。
      五、build_examples: 就是詢問是否編譯 vtk 中的例子,初次用VTK,選上便於
      學習。
      六、build_shared_libs: 若是設置爲off,就只會生成lib文件,用於開發確定是
      夠了。若是設置爲on,將會多生成 dll 文件,這些dll須要拷到windows/system
      目錄下。若是用靜態庫編程,即off時,應用程序能夠獨立運行,尺寸也比較大,
      若是用動態庫編程,即on時,應用程序必須找到動態庫才能運行,但尺寸能夠作
      得比較小。建議選On, 我試過選OFF,所謂的靜態編譯,但以後新建一個項目時,
      仍是會出現找不到文件的問題。
      7.vtk_use_parallel: 對於想用vtk 作並行計算的朋友,要把這個選上,
      對於只想學學vtk 的,保持默認 off  
     )

五、打開 KTV.sln ,若是使用vs2010,在編譯整個解決方案以前,須要注意:
  1)請先找到VTKSrc\GUISupport\MFC\vtkMFCWindow.cpp ,找到相似如下源碼並修改數值以下:
ui

  1. #ifndef WINVER  
  2. #define WINVER 0x0501  
  3. #endif  
  4. #ifndef _WIN32_WINNT  
  5. #define _WIN32_WINNT 0x0501 // =_WIN32_WINNT_NT4  
  6. #endif  
  7. #ifndef _WIN32_IE  
  8. #define _WIN32_IE 0x0601 //=_WIN32_IE_IE60SP1  
  9. #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
  四個文件,每一個文件下找到相似如下源碼並修改數值以下:spa

  1. #ifndef WINVER          
  2. #define WINVER 0x0501      
  3. #endif  
  4.   
  5. #ifndef _WIN32_WINNT      
  6. #define _WIN32_WINNT 0x0501      
  7. #endif              
  8.   
  9. #if _MSC_VER >= 1300  
  10. #ifndef _WIN32_WINDOWS      
  11. #define _WIN32_WINDOWS 0x0501   
  12. #endif  
  13. #endif  
  14.   
  15. #ifndef _WIN32_IE        
  16. #define _WIN32_IE 0x0601    
  17. #endif  
  3)若是不進行上述兩步操做,在編譯項目過程當中會出現相似下面錯誤:
  fatal error C1189: #error :  This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
  
六、編譯整個解決方案。
  若是以前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文件夾下。



總結:主要是使用到了MFC支持,從中取出MFC LIB文件,取消QT的全部選擇項,一次性成功:.net




而後,打開目標文件夾的方案文件,release 和debug都所有生成一遍,大功告成!
debug

相關文章
相關標籤/搜索