您的位置:首页 > 编程语言 > C语言/C++

VTK5.10.1+Cmake+vs2010整合安装

2015-06-02 16:01 543 查看
 1. 下载:(VS2010就自己在网上找了咯,这里不提供具体路径下载了)
vtk-5.10.1.zip源程序
vtkdata-5.10.1.zip 数据
vtkDocHtml-5.10.1.tar.gz (文档可以不下载)

(vtk相关安装程序下载:http://vtk.org/VTK/resources/software.html
cmake-2.8.11.1.zip

(cmake程序下载:http://www.cmake.org/cmake/resources/software.html

2.VTK安装于保存:

    建立将要安装vtk的文件夹,例如:...\VTK。在此文件夹下,建立如下4个文件夹:

..\vtk 用于置放源码(解压vtk-5.10.1.zip更名为vtk)

..\vtkdata      用于置放数据(解压vtkdata-5.10.1.zip更名为vtkdata)

..\bin          用于编译(新建一个就好命名由自己决定)

..\doc        放置文档(可以不下载当然就意味着可以不要)

3. 先安装CMake,然后利用CMake编译:

 ------------------------------------------------------------------

       where is the source code:      ...\VTK\vtk

       where to build the binaries:   ...\VTK\bin

 ------------------------------------------------------------------

    然后Configure。祈祷不出现进程MSDEV.EXE死机的情况——如果不幸出现了,Delete Cache,(最彻底的办法是把整个bin文件夹清空),然后——try again!

此后,修改Cache Values,可以参考如下设置(是我自己的设置):

 -------------------------------------------------------------------

       BUILD_EXAMPLES                    ON

       BUILD_SHARED_LIBS                ON

        (将多生成dll文件,可以用动态库编程)

       BUILD_TESTING                      OFF

       CMAKE_INSTALL_PREFIX          C:\Program Files\VTK

        (注:很多解压出来的dll,lib会存放于此)

       VTK_DATA_ROOT                   ...\VTK\vtkdata

       VTK_USE+GUISUPPORT           ON

        (否则用MFC会有问题)

         VTK_USE_MFC                    ON

         VTK_USE_MPEG2_ENCODER   ON

        (如果缺少受版权保护的vtkMPEG2Encode.lib,这里无法打开mpeg2,只能设置off。当拿到这个lib以后,可以设为on,然后把这个lib存放于下面的路径中。)

         vtkMPEG2Encode_INCLUDE_PATH  C:\Program Files\VTK\include\vtk-5.0

         vtkMPEG2Encode_LIBRARIES  C:\Program Files\VTK\lib\vtkMPEG2Encode.lib

       VTK_USE_PARALLEL               OFF

        (这个是并行计算相关的)

       VTK_USE_QVTK                    OFF

       VTK_USE_RENDERING             ON

        (这个我确实没搞懂到底如何设置)

 -------------------------------------------------------------------

    修改完毕以后再次Configure,等红色高亮部分都变白,则宣告make成功,此时OK,祈祷不出现报错信息。

4.编译Camke生成的工程文件:

用 vc++2010打开 D:\VTK\VTKbin\Utilities\MaterialLibrary目录下的MaterialLibrary.sln 文件,右键点击All_Build选择重新生成。

5. 若build_shared_libs 选择On,把D:\VTK\VTKbin\bin\Debug里生成的vtksys.dll文件拷到windows/system目录下。或者打开VS2010的属性管理器(视图->其他窗口->属性管理器),双击任意“Microsoft.Cpp.Win32.user”,弹出属性页,在里面VC++目录的 Library Directories 中将bin文件夹中的Debug包括进去。

6.有可能会遇到的麻烦:

打开D:\VTK\VTKbin目录下的VTK.sln,右键点击All_Build选择重新生成。

    若build_shared_libs选择On,中途涉及MFC的示例会出错,

错误①

Link错误:

a.在Solution Explorer中分别找到vtkDLG、vtkMDI、vtkSDI这三个项目,

右键—>Properties—>Configuration Properties—>Linker—>Input—>在Additional Dependencies中添加..\..\..\..\..\bin\Debug\vtkIO.lib

b.再找到Win32SampleMFC这个项目,与以上类似,添加..\..\..\..\bin\Debug\vtkIO.lib这样,就为这些项目加入了vtkIO.lib库。

 

错误②

This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.

解决办法为:

右击_WIN32_WINNT,查找所有引用,将查找出的文件中的4个stdafx.h文件中的如下部分改动为:

找到五个工程:vtkDLG、vtkMDI、vtkSDI、Win32SampleMFC、vtkMFC

a.打开前四个工程源文件中的stdAfx.h,

如果找不到,则打开<资源文件>中的stdAfx.cpp,打开找到其中#include "stdAfx.h" ,右击:<打开"stdAfx.h">

b.打开vtkMFC工程的vtkMFCWindow.cpp,按如下方法修改

(注:a.4个stdafx.h

3个都是在{解压的vtk5.10.1的目录}\Examples\GUI\Win32\vtkMFC\  下面,你可以搜索一下,共4个stdafx.h,都改

1个在{解压的vtk5.10.1的目录}\Examples\GUI\Win32下面

b.一个 vtkMFCWindow.cpp, 在{解压的vtk5.10.1的目录}\GUISupport\MFC



 

// 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  

然后右击Cone6,选择调试->启动新实例,这时可以看到正确运行的程序了。(注:Cone6需要你CMAKE时勾选build_examples:)

新建项目的配置

1. 新建项目Test(控制台应用程序空项目),增加Test.cpp文件,用Cone6.cxx的文件内容覆盖Test.cpp的内容。

1.1 配置附加包含目录,位于项目属性->配置属性->c/c++/常规 的第一项,拷入入下述内容(具体可通过查看实例的附加包含目录):

D:\VTK\bin;D:\VTK\bin\Common;D:\VTK\bin\Utilities;D:\VTK\vtk5.0\VolumeRendering;D:\VTK\vtk5.0\Graphics;D:\VTK\vtk5.0\Filtering;D:\VTK\vtk5.0\Common;D:\VTK\vtk5.0\Rendering;%(AdditionalIncludeDirectories)

1.2 附加依赖项,位于项目属性->链接器->输入 ->点击右面的<编辑>,拷入入下述内容(具体可通过查看实例的附加包含目录,切勿直接负责..\..\性质的内容,若想直接复制,请确保新建项目与拟拷配置的项目位于同一文件夹下):

kernel32.lib

user32.lib

gdi32.lib

winspool.lib

shell32.lib

ole32.lib

oleaut32.lib

uuid.lib

comdlg32.lib

advapi32.lib

..\..\VTK\bin\bin\Debug\vtkRendering.lib

..\..\VTK\bin\bin\Debug\vtkGraphics.lib

..\..\VTK\bin\bin\Debug\vtkImaging.lib

..\..\VTK\bin\bin\Debug\vtkFiltering.lib

..\..\VTK\bin\bin\Debug\vtkCommon.lib

..\..\VTK\bin\bin\Debug\vtksys.lib

ws2_32.lib

 

1.3

将D:\vtk\bin\bin\debug这个文件夹选择此中所有的DLL 后缀的文件全部复制到c:\windows\system32 (调试时推荐),或者拷贝到VC项目可执行文件所在位置(安装到其他机器时拷贝)。

1.4    后右击Cone6,选择调试->启动新实例,看到Cane6的实例窗口

(可以修改

  for (i = 0; i < 360; ++i)

中的360改更为大数值如7200 效果会稍微明显一点)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ VTK CMAKE VS2010