原文链接:http://blog.csdn.net/left_la/article/details/7069708

本人做了少量修改!

Win7 + 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 ,找到类似以下源码并修改数值如下:

  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

  四个文件,每个文件下找到类似以下源码并修改数值如下:

  1. #ifndef WINVER
  2. #define WINVER 0x0501
  3. #endif
  4. #ifndef _WIN32_WINNT
  5. #define _WIN32_WINNT 0x0501
  6. #endif
  7. #if _MSC_VER >= 1300
  8. #ifndef _WIN32_WINDOWS
  9. #define _WIN32_WINDOWS 0x0501
  10. #endif
  11. #endif
  12. #ifndef _WIN32_IE
  13. #define _WIN32_IE 0x0601
  14. #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文件夹下。

总结:主要是使用到了MFC支持,从中取出MFC LIB文件,取消QT的所有选择项,一次性成功:

然后,打开目标文件夹的方案文件,release 和debug都全部生成一遍,大功告成!

编译VTK的MFC库的更多相关文章

  1. MFC如何使用静态MFC库

    大部分MFC程序都是使用 在共享DLL中使用MFC ,但是VS每一个版本都需要一个 MFC运行库,实在是有点烦人. 所以我选择了使用静态MFC库,虽然文件会大一些,但是至少不麻烦了. VS这个做的不够 ...

  2. 关于MFC库和CRT库冲突的分析

    当MFC库和CRT库冲突时,会出现一个LNK2005的错误.具体的错误如下: nafxcwd.lib(dllmodul.obj): error LNK2005: _DllMain@12 already ...

  3. 非MFC工程中使用MFC库

    目录(?)[-] 需求说明 常见问题 问题分析 参考解决方法 我的解决方案 Stdafxh的原理   需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console A ...

  4. vs2010静态链接MFC库报链接错误

    由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...

  5. 使用VS2010编译64的Geos库

    Geos库在cmake中总是报错,所以我决定试试nmake编译64位的库.现将编译过程记录如下: 1.下载Geos,我下的是最新版3.5.0,地址在 http://trac.osgeo.org/geo ...

  6. Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误

    在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...

  7. MFC下调用控制台和控制台下MFC库的支持

    1.MFC下调用控制台 在CWinApp的InitInstance中对话框的DoModal之前加入 AllocConsole(); // 开辟控制台 SetConsoleTitle(_T(" ...

  8. android开发 NDK 编译和使用静态库、动态库 (转)

    在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件, ...

  9. iOS——为Xcode编译POCO C++静态库

    一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C+ ...

随机推荐

  1. CSS 利用transform达到居中效果

    <body> <div class="center"> .... </div> </body> 让left和top都是50%,这在水 ...

  2. AnimationEvent事件问题

    AnimationEvent事件问题 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/deta ...

  3. vscode简单使用介绍及个人常用扩展插件

    vscode全称Visual Studio Code 是微软开发一款IDE,官方地址 vscode  作为一款前端编辑器功能很强大,灵活,可以根据个人喜好选择扩展插件,而且还支持多种开发语言, 关于v ...

  4. JAVA之StringBuffer测试样码

    这类操作大同小异,但是,高手却能从String,StringBuilder,StringBuffer的应用场景和性能上,分析出其在JAVA编译和JVM上的实现过程差别. 我在CSDN上就看到一个高手分 ...

  5. Spring Boot奇怪的问题:The Bean Validation API is on the classpath but no implementation could be found

    注意:此方法不能解决在项目上用了Hibernate Validator的问题. 错误如下: *************************** APPLICATION FAILED TO STAR ...

  6. Eclipse全局搜索

    按[Ctrl]+[H] 搜索时支持一些正则表达式. 参考: http://blog.csdn.net/huaweitman/article/details/38709323

  7. ViewPage+Frament+listView滑动效果

    近期在做一个须要使用Frament+ViewPage制作一个滑动的效果,看了非常多资料,最终实现了,这与大家分享一下战果 总结一下.这里我做了一个Demo分享给大家 我的文件文件夹结构图 1.首先要有 ...

  8. HDU 5063 Operation the Sequence(暴力)

    HDU 5063 Operation the Sequence 题目链接 把操作存下来.因为仅仅有50个操作,所以每次把操作逆回去执行一遍,就能求出在原来的数列中的位置.输出就可以 代码: #incl ...

  9. Cocos2d-x《雷电大战》(3)-子弹无限发射

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现雷电游戏中,游戏一開始,英雄飞机就无限发射子弹的功能. 这里的思想是单独给子弹弄一个 ...

  10. Linux下把目录拷贝到全部同名目录的脚本

    需求:拷贝文件夹到Linux文件夹下.覆盖该Linux文件夹下全部同名文件夹 目标:Linux下,运行本脚本.输入目录名.就可以批量复制覆盖. 使用说明:         先把本脚本文件和要复制的文件 ...