VTK安装总结(VS2010)


(写在前面:安装建议采用低版本的(6.0以下),新版本的安装时会出现各种问题,如debug\bin下没有lib文件等。。)

1.     必须下载:
vtk-5.10.1.zip 源程序
vtkdata-5.10.1.zip 数据
(vtk相关安装程序下载:http://vtk.org)
cmake-2.8.2-win32-x86.zip (编译器)
CMake是一个跨平台的安装( 编译 )工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试 编译器 所支持的C++特性,类似UNIX下的automake。只是 CMake 的 组态档 取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个 集成开发环境 (IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
(cmake程序下载:http://www.cmake.org/HTML/Index.html)

vtkpython-6.3.0-Windows-32bit.exe 这类的安装文件可以不进行安装
(此文件可以运行Tcl文件)

2. 将 vtk-5.10.1.zip 解压到D:\Program Files\VTK\VTKsourcecode, 将vtkdata-5.10.1.zip解压到D:\Program Files\VTK\VTKdata
  
将数据和源代码文件分开放置 新建一个VTKbin文件夹

3. 解压 cmake-2.8.2-win32-x86.zip(32位计算机),运行{解压目录}\bin\cmake-gui.exe,
设置sourse code目录为D:\Program Files\VTK\VTKsourcecode\,
       build目录为D:\Program Files\VTK\VTKbin\
按 configure 按钮,选Visual Studio 10编译器(这里即使是win7 64位的也建议不要选VS2010 W64,不然容易出错),然后cmake会描所需要的文件。
选中 Advanced 再按 configure,可以看到一个vtk_use_guisupport
6.0以上没有该项目, 直接选Qt或者MFC的gui-support),选择它,再按 configure,选vtk_use_mfc,再configure,configure的次数是无所谓的。
(1) vtk_data_root: 目的是告诉cmake,vtk需要的数据都在哪里,我们的数据在 c:/vtk/vtkdata/(单独的文件夹)
(2)cmake_install_prefix: 虽然网上说默认就好。但是我安装时出了问题。强烈建议该项的位置填VTK源程序和数据等文件的上一级文件的位置,即若vtk-5.10.1.zip 解压到D:\Program Files\VTK\VTKsourcecode,则此处填D:\Program Files\VTK。
build_examples: 就是询问是否编译vtk中的例子,你在看这个教程,说明肯定是初次用VTK,建议选上。
build_shared_libs: 如果设置为off,就只会生成lib 文件,用于开发肯定是够了。如果设置为on,将会多生成dll文件,这些dll需要拷到windows/system目录下。如果用静态库编程,即off时,应用程序可以独立运行,尺寸也比较大,如果用动态库编程,即on时,应用程序必须找到动态库才能运行,但尺寸可以做得比较小。建议选On, 我试过选OFF,所谓的静态编译,但之后新建一个项目时,还是会出现找不到文件的问题。
vtk_use_parallel: 对于想用vtk做并行计算的朋友,要把这个选上,对于只想学学vtk的,保持默认 off
    所有项目会变成灰色后后可以点击 Generate,完成时会提示 Generating done,此时关闭cmake。

4. 用vs2010打开D:\Program Files\VTK\VTKbin\Utilities\MaterialLibrary目录下的 MaterialLibrary.sln 文件,右键点击All_Build选择重新生成。
 
5. 若build_shared_libs选择On,把D:\Program Files\VTK\VTKbin\bin\Debug里生成的vtksys.dll文件拷到windows/system目录下。或者打开VS2010的属性管理器(视图->其他窗口->属性管理器),双击任意“Microsoft.Cpp.Win32.user”,弹出属性页,在里面VC++目录的 Library Directories 中将bin文件夹中的Debug包括进去(建议两种方法都用)。
此处我只进行了第一项,但测试后发现dll文件不全,此处必须把D:\VTK5\vtkbin\bin\Debug 下的所有dll文件都拷贝到system下才可以使用
6. 打开D:\Program Files\VTK\VTKbin目录下的VTK.sln,右键点击All_Build选择重新生成。




     若build_shared_libs选择On,中途涉及MFC的示例会出错,
对应的解决办法为:
错误①
Link错误:
a.在Solution Explorer中分别找到vtkDLG、vtkMDI、vtkSDI、vtkMFC这四个项目,右键—>Properties—>Configuration Properties—>Linker—>Input—>在Additional Dependencies中添加..\..\..\..\..\bin\Debug\vtkIO.lib
     b.再找到Win32SampleMFC这个项目,与以上类似地在Additional Dependencies中添加..\..\..\..\bin\Debug\vtkIO.lib
这样,就为这些项目加入了vtkIO.lib库。
上述方法可能失效,可采用下面的方法在vtkDLG、vtkMDI、vtkSDI、vtkMFC、Win32SampleMF项目的CMaklist.txt中修改。打开CMakelist.txt,在TARGET_LINK_LIBRARIES中添入vtkIO。
例如vtkSDI的CMakelist.txt中,TARGET_LINK_LIBRARIES(vtkSDIvtkMFC)应改为TARGET_LINK_LIBRARIES (vtkSDIvtkMFCvtkIO)。其他的项目修改类似。

错误②
This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
解决办法为:
找到五个工程:vtkDLG、vtkMDI、vtkSDI、Win32SampleMFC、vtkMFC
a.打开前四个工程源文件中的stdAfx.h,
在四个工程下的项中的.h文件中可以找到。另外可以打开D:\Program Files\VTK\,利用文件搜索功能搜寻,找到后用VS2010打开修改(本人用后者,感觉较快)。
b.在vtkMFC工程下的< Resource Files>中,找到vtkMFCWindow.cpp打开修改

4个stdafx.h如下修改
// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER        // Allow use of features specific to Windows 95 and Windows NT 4 or later.
#define WINVER 0x0601    // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif

#ifndef _WIN32_WINNT    // Allow use of features specific to Windows NT 4 or later.
#define _WIN32_WINNT 0x0601    // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif           

#if _MSC_VER >= 1300
#ifndef _WIN32_WINDOWS    // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0601 // Change this to the appropriate value to target Windows Me or later.
#endif
#endif

#ifndef _WIN32_IE      // Allow use of features specific to IE 4.0 or later.
#define _WIN32_IE 0x0800  // Change this to the appropriate value to target IE 5.0 or later.
#endif
红字对应的是win7版本。

vtkMFCWindow.cpp中的部分代码:
// Allow use of features specific to Windows 95 and Windows NT 4 or later.
#ifndef WINVER
#define WINVER 0x0601
#endif

// Define _WIN32_WINNT and _WIN32_IE to avoid the following error with Visual
// Studio 2008 SP1:
// "C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\sdkddkver.h(217) :
// fatal error C1189: #error :  _WIN32_WINNT settings conflicts with _WIN32_IE
// setting"

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0601 // =_WIN32_WINNT_NT4
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0800 //=_WIN32_IE_IE60SP1
#endif
此时,应该没有问题了。
若出现cannot find vtkMFC.lib则是由于cmake阶段未勾选vtk_use_mfc
7.将D:\Program Files\VTK\VTKbin\bin \debug这个文件夹选择此中所有的DLL 后缀的文件全部复制到c:\windows\system32 (调试时推荐),或者拷贝到VC项目可执行文件所在位置(安装到其他机器时拷贝)。

8. 用VS2010打开D:\Program Files\VTK\VTKbin \Examples\All\VTKExamples.sln,选择Cone项目,右键set as active project(VC不熟的人一定要记得这个!),然后
选择调试->启动新实例,这时可以看到正确运行的程序了。

9. 新建项目Test(控制台应用程序空项目),增加Test.cpp文件,用Cone6.cxx的文件内容覆盖Test.cpp的内容。
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
int main()
{
   vtkConeSource *cone = vtkConeSource::New();
   cone->SetHeight( 3.0 );
   cone->SetRadius( 1.0 );
   cone->SetResolution( 10 );

   vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
   coneMapper->SetInputConnection( cone->GetOutputPort() );

   vtkActor *coneActor = vtkActor::New();
   coneActor->SetMapper( coneMapper );

   vtkRenderer *ren1= vtkRenderer::New();
   ren1->AddActor( coneActor );
   ren1->SetBackground( 0.1, 0.2, 0.4 );

   vtkRenderWindow *renWin = vtkRenderWindow::New();
   renWin->AddRenderer( ren1 );
   renWin->SetSize( 300, 300 );

   int i;
   for (i = 0; i < 360; ++i)
     {
     renWin->Render();
     ren1->GetActiveCamera()->Azimuth( i );
     }

   cone->Delete();
   coneMapper->Delete();
   coneActor->Delete();
   ren1->Delete();
   renWin->Delete();

   return 0;
}

9.1项目属性->配置属性->VC++目录->库目录:
D:\Program Files\VTK\VTKbin\bin\debug
若出现无法找到vtkRendering.dll等错误,则是由于该环境变量未配置正确。
 
9.2项目属性->配置属性->VC++目录->包含目录 ,拷入入下述内容:
D:\Program Files\VTK\VTKbin;
D:\Program Files\VTK\VTKbin\bin;
D:\Program Files\VTK\VTKsourcecode\GenericFiltering;
D:\Program Files\VTK\VTKsourcecode\Common;
D:\Program Files\VTK\VTKsourcecode\IO;
D:\Program Files\VTK\VTKsourcecode\Filtering;
D:\Program Files\VTK\VTKsourcecode\Rendering;
D:\Program Files\VTK\VTKsourcecode\Graphics;
D:\Program Files\VTK\VTKsourcecode\VolumeRendering;
D:\Program Files\VTK\VTKsourcecode\Imaging;
D:\Program Files\VTK\VTKsourcecode\Hybrid;
D:\Program Files\VTK\VTKsourcecode\GUISupport;
D:\Program Files\VTK\VTKsourcecode\ Utilities;
D:\Program Files\VTK\VTKbin\ Utilities;
D:\Program Files\VTK\VTKsourcecode\Parallel;
D:\Program Files\VTK\VTKsourcecode\Widgets
( 注意:网上很多配置方法在Additional include directories(附加包含路径)没有添加D:\Program Files\VTK\VTKbin;D:\Program Files\VTK\VTKbin\bin; 结果出现错误提示:无法打开包括文件:“vtkConfigure.h”: No such file or directory)
9.3位于项目属性->链接器->输入->附加依赖项 ,拷入下述内容(下面有些lib文件已经被附加进去了,就不需要再添加进去):
opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib vtkCommon.lib vtkDICOMParser.lib vtkexoIIc.lib vtkexpat.lib vtkFiltering.lib vtkfreetype.lib vtkftgl.lib vtkGenericFiltering.lib vtkGraphics.lib vtkHybrid.lib vtkImaging.lib vtkIO.lib vtkjpeg.lib vtkNetCDF.lib vtkpng.lib vtkRendering.lib vtksys.lib vtktiff.lib vtkVolumeRendering.lib vtkWidgets.lib vtkzlib.lib
(建议把D:\Program Files\VTK\VTKbin\bin \debug中所有的lib文件都填进去)
9.4调试,运行,可以看到运行窗口。
像Cannot open include file: 'vtkConeSource.h':这样的错误都是上面三大步没走对或dll没拷到windows/system下造成的。要建立新项目,必须重新配置三大步,因为那三步都是Project setting里的,新项目没有默认这些设置。
如果某个项目再提示缺什么lib或.h的话,再临时加上去就行了。

merical的命令行语句
cd VTK5\vtk5\VTK5.10.1\Examples\Medical\Cxx\bin\Debug

medical1.exe d:\VTK5\vtkdata\VTKData5.10.1\Data\headsq

路径:
参考:

原始文件:

安装VTK后运行Examples\Medical中的例子时出现的问题及解决方法

安装的VTK版本为VTK 5.10.0,具体安装过程参照水灵的教学视频,VTK安装后,在按照视频运行
例子的过程中出现了以下错误,下文给出了具体解决方法,希望能给予出现相同错误的VTK初学者以帮助~

问题一:Configure后,出现错误:
           CMake Error at CMakeLists.txt:32 (INCLUDE):
            include could not find load file:
               vtkTestingObjectFactory
解决方法:在Medical\Cxx文件夹中的CMakeLists.txt里面,将INCLUDE(vtkTestingObjectFactory)注释掉,具体操作为,在这一句前面加“#”。(此处亲测后应该直接删掉该语句。。)

问题二:Generate后,出现错误:
         CMake Error at CMakeLists.txt:33(ADD_EXECUTABLE):
         Cannot find source file:
               MedicalExamplesCxxTests.cxx
解决方法:在Medical\Cxx文件夹中的CMakeLists.txt里面,删除ADD_EXECUTABLE(${KIT}CxxTests        ${KIT}CxxTests.cxx ${MyTests})中的${KIT}CxxTests.cxx,问题即可得到解决。

错误解决后按照水灵的视频进行后续操作,即可成功运行例子。

你可能感兴趣的:(VTK)