首页 > 代码库 > 第02章-VTK安装(2)

第02章-VTK安装(2)

【译者:这个系列教程是以Kitware公司出版的《VTK User’s Guide -11th edition》一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容。敬请期待^_^。欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!】


2.3Windows XP, Vista及以上版本平台下安装VTK

Windows平台下有两种安装VTK的方式。第一种是二进制/可执行文件安装【译者:VTK的二进制安装文件可以从http://vtkchina.org/bbs/forum.php上下载,这个安装文件的VTK版本是5.0的,比较老,所以不建议用这种傻瓜式的安装方法安装VTK,同时建议安装本书后续内容提到的vtk-5.6.1-win32.exe文件。安装这个文件以后,可以在自己的计算机运行*.tcl的文件。另外也可以从http://vtkchina.org/bbs/forum.php下载到VTK-5.10.1的安装版本】,通过这种安装方式可以捆绑安装Tcl等工具;第二种方式是VTK源代码编译安装,通过编译生成C++库文件以及VTK封装代码(生成Java,Tcl和Python等的可执行文件)。两种安装方式相比较而言,二进制安装方式要简单得多,但源文件编译安装方式则更具优势,它可以跟踪、调试以及修改VTK的源代码,如果你是开发人员的话,这种安装方式将会非常适合你。当然,如果选择二进制方式安装VTK的话,同样可以通过不同的方式扩展VTK:创建自定义类(见“编写VTK的类:概览”一节),使用运行时可编程过滤器(Run-time Programmable Filters)(见“可编程过滤器”一节)以及运行时使用自定义的VTK类取代VTK原有的类(见“对象工厂”一节)等方式同样可以扩展VTK。

二进制安装

安装vtk.exe(用于执行Tcl/Tk文件的可执行程序)。可从VTK官网下载,一般是vtk-X.X.X-win32.exe文件,如vtk-5.6.1-win32.exe,安装界面如图2-1所示。安装文件名中的“X.X.X”表示安装的VTK版本号。同时还可以下载相应版本号的VTK源代码的文件*.zip以及VTK数据文件VTKData。每当发布新版本的VTK时,我们会在VTK的官网上给出链接以供下载,用户可以关注vtkusers邮件列表上有关VTK版本发布的公告。


图2-1 Windows下vtk.exe程序安装界面

VTK源代码目录中包含很多*.tcl的脚本文件,借助这些文件可以了解VTK里的类是如何协同工作的。把下载到的vtk-X.X.X.zip和vtkdata-X.X.X.zip文件解压到硬盘中,在VTK源代码文件夹下,可以找到“Examples”文件夹,文件夹“Examples”里又有类似“GUI”,“MangleMesa”以及“Parallel”的文件夹,每个文件夹的都含有一个名为“Tcl”的文件夹,里面包含了大量的Tcl例子。除了“Examples”文件夹,还有大量的库文件夹【译者:“库文件夹”是指VTK以这些文件夹的名字生成同名的库文件,如vtkGraphics.lib,vtkImaging.lib等】,像Graphics, Imaging和Filtering。每个目录都会包含一个Testing/Tcl子目录,里面有对VTK逆行测试的例子,双击这些Tcl文件即可运行。初次双击后缀为.tcl的文件时,会弹出对话框,询问你用什么程序打开文件,这意味着你要把Tcl文件与vtk.exe可执行文件做一下关联,也就是在“打开为…”对话框中选择“浏览”,定位到VTK安装目录下,通常是“C:\ProgramFiles\VTK 5.6”或“C:\Program Files\Documents andSettings\<username>\My Documents\VTK 5.6”,然后选择bin目录,选择可执行文件vtk.exe,可以把“打开为…”对话框中的“使用此程序打开此种类型的文件”复选框选上,再点击“确定”按钮,以后双击.tcl后缀的文件就可以用VTK自动运行Tcl脚本文件了。

另外,如果你已经安装了Tcl/Tk程序的话,*.tcl的文件会自动与Tcl/Tk程序进行关联,这时你再双击*.tcl文件时要出现如下的错误提示:can’t find package vtkwhile executing “package require vtk”。可以用上一段介绍的方法,把*.tcl文件与vtk.exe程序进行关联。

以上就是在Windows平台下安装VTK二进制文件的全部过程,在第三章里我们会详细介绍如何书写自己的C++类,以及Tcl, Java和Python应用程序。

源代码安装

如果准备用VTK开发C++应用程序以及扩展VTK的话,就需要采用源代码安装方式。这种安装方式可能是一件比较有挑战的事情,它可能需要占用你的计算机不少时间。首先要确保你的机器是否适合编译所发布的VTK源代码,同时机器上也应该安装了Windows XP, Vista或以上版本的操作系统,另外必须安装了C++编译器,这个指南是以MicrosoftVisual Studio 2008【译者:原书是采用Microsoft VisualStudio 2005,我们在翻译时,将所有例子程序都在Microsoft VisualStudio 2008上做了测试,所以该翻译版本是基于Microsoft VisualStudio2008的。】及更高版本的编译器做测试的,VTK可以很好的用这些版本的编译器进行编译。同样也支持Borland C++编译器、Cygwin下的gcc编译器或MinGW,NMake,MicrosoftVisual C++免费版本以及Microsoft Visual C++ 2005等。如果机器上还没安装任何编译器的话,先安装以上所说的编译器之一【译者:推荐安装Microsoft VisualStudio 2008】。

接下来要考虑的是需要使用其他什么工具。假如准备用Java开发程序的话,必须下载安装Java JDK(可在Sun Microsystems:http://www.java.sun.com上下载)。如果打算用Tcl/Tk做开发,则须下载安装Tcl/Tk(源代码可从http://www.tcl.tk下载,或者从http://www.activestate.com/Products/ActiveTcl下载Tcl/Tk的二进制安装文件)。注意,Tcl/Tk 8.4版本可以与VTK 5.4.0版本协同工作。

安装CMake。要编译VTK,首先你必须先安装CMake。CMake的安装程序可以从http://www.cmake.org下载。

运行CMake。安装完C++编译器、CMake以及所需的其他工具后(如Tcl,Java, Python),就可以运行CMake程序。打开CMake程序,界面如图2-2所示。CMake会根据不同的编译器以及操作系统生成VTK项目文件。在“Where is the sourcecode”一栏中指定VTK源码所在的目录(也就是压缩包vtk-5.6.1.zip解压后所在的目录),在“Whereto build the binaries”一栏指定VTK编译过程中生成的文件的目录【译者:源文件目录和编译目录最好分开,可以建立一个空的文件夹,用于存放编译过程中生成的文件。】,这两个路径的设置可以通过右边的“Browse Source…”和“BrowseBuild…”按钮进行选择,或者手动输入。设置完这两个路径以后,就可以按“configure”按钮。初次配置时,会弹出对话框让用户选择编译器,根据机器已安装的编译器选择对应的编译器即可。接着CMake会自动填充变量列表的值,第一次运行configure以后,所有的变量条目会以红色显示,红色标示着缓存条目是自动生成的或者在上一次configure时值被作了修改。


图2-2CMake会根据不同的编译器、操作系统生成工程文件、Makefiles等,CMake是跨平台的,图中所示为CMake的图形用户界面。

Configure结束后就可以定制VTK编译的选项。比如,如果想激活VTK的Tcl封装特性,就必须把VTK_WRAP_TCL这一项勾选上(设置其值为ON)。设置完这些选项的值以后,再次按Configure按钮,直到所有的选项都变成了灰色。如果安装了Tcl/Tk程序,关于Tcl/Tk的一些选项还是显示NOTFOUND的话,就必须手动设置它们的值。可点击每个条目最右边的按钮进行设置,根据各个条目类型的不同,条目编辑的交互形式也各不相同,有文件选择对话框、文本框、下拉菜单等。通过这些交互方式,可对条目的值进行修改。

下面列出VTK中一些重要的变量值:

l  BUILD_SHARED_LIBS – 如果设置成yes(即勾上这个选项),VTK会编译成DLL动态库或者说共享库,如果设置成no,则编译成静态库。缺省值是no,即静态编译。某种程度上静态库可能比较好使用,因为在可执行文件运行时,不要求这些库文件在当前目录下或系统Path环境变量下,可执行文件自身会包含相关的库文件。这对于发布基于VTK的应用程序是比较有利的。

l  VTK_WRAP_TCL – 这个选项决定是否编译Tcl的封装特性。

l  VTK_WRAP_PYTHON – 决定是否编译Python的封装特性。

l  VTK_WRAP_JAVA – 决定是否编译Java的封装特性。

要获取关于这些选项的在线帮助,可以右击CMake上的变量,然后选择“Helpfor Cache Entry”,大多数默认的设置应该都是正确的。

设置完相关选项的值之后,再次按Configure按钮,直到所有的选项都变成了灰色。然后点击“Generate”(有些CMake版本可能是“OK”按钮),CMake会根据选择的编译器类型自动生成对应的工程文件。如果是Microsoft Visual Studio,就会在“Whereto build the binary”指定的目录下生成一些工程文件(Visual Studio 6.0是vtk.dsw文件,VS2005或更高版本的是vtk.sln文件)。在VisualStudio环境中加载工程文件后,选择编译版本(Debug, Release,MinSizeRel, RelWithDebInfo等),然后选择ALL_BUILD工程,开始编译工程。如果是使用Borland编译器,生成的是Makefiles文件,则必须以命令行的形式给编译器指定合适的参数。Makefiles文件也是位于“Whereto build the binary”所指定的目录下。

当所有的VTK工程都编译完成后,所有的库文件以及可执行文件会出现在CMake里指定的编译目录下的bin子目录中(除非你修改了CMake选项EXECUTABLE_OUTPUT_PATH或LIBRARY_OUTPUT_PATH选项的值)。

注意:不要使用MSVC++中的“RebuildAll”菜单来编译源代码。需要重新生成每样内容的话,先清空VTK的编译目录,重新CMake,按以上的步骤重新生成工程文件,然后再编译。

如果选项BUILD_SHARED_LIBS的值设为ON的话,VTK程序运行时需要加载相应的DLL文件。这有不同的方法可以让VTK程序运行时加载DLL库文件,每种方法都有利有弊。最简单的方法就是确保VTK可执行程序和需要加载的VTK DLL库文件在同一个目录里,可以复制所有的VTK DLL库文件到应用程序所在的目录中,或者在CMakeLists文件中把应用程序的编译目录跟EXECUTABLE_OUTPUT_PATH的路径设置成一样的。一旦所有的VTK DLL文件和所执行的应用程序都位于同一目录,一切就会正常运行。这种做法的好处就是简单,不好的地方就是一旦更新了VTK DLL文件以后,就无法更新先前复制过去的VTK DLL文件,除非把重新编译的VTK DLL文件再复制一遍;而且一旦应用程序的编译目录与VTK的DLL文件混在一起的时候,可能很难确定哪个输出来自哪个项目。

另一种方法就是改变PATH环境变量,这样就算应用程序与VTK DLL库文件不在同一个目录也能正确找到所要加载的动态链接库。PATH环境变量的设置也有两种方法,第一种方法是在命令行窗口中通过set命令临时改变PATH环境变量,VTK应用程序的运行也是在同一个命令行窗口中;或者是直接改变系统的PATH环境变量,将包含VTKDLL文件的路径添加到PATH环境变量中。除非你需要在同一台计算机上运行两种不同版本的VTK动态库文件,否则建议用后一种方法【译者:也就是将VTK DLL文件所在的路径放在环境变量PATH里,右击“我的电脑”->“属性”->“高级”->“环境变量”进行设置。】设置PATH环境变量。

KWWidgets提供了一个使用批处理脚本文件设置PATH变量(不用去修改PATH系统环境变量)的很好的例子。可参考KWWidgets目录下的KWWidgetsSetupPaths.bat脚本文件,KWWidgets源代码文件可从http://www.kwwidgets.org下载。

如果想了解更多关于Windows下DLL文件加载方面的内容,可以参考Windows SDK文档里的LoadLibrary和LoadLibraryEx函数。

至此,就成功地在计算机上安装了VTK,因为VTK的复杂性以及大量的源代码文件,可能使得安装编译过程显得有一定的挑战性。请仔细阅读我们在这部分中所介绍的安装说明,如果在这个过程中遇到了什么问题,可以在vtkusers邮件列表上提问(参考第一章“其他资源”一节)以获取帮助或者从Kitware公司获取商业支持。

2.4UNIX平台下安装VTK

UNIX系统存在众多的版本,因此,我们不得不通过编译VTK源代码来生成相关的库文件和可执行程序。

源代码安装

这部分内容将带领你过一遍在UNIX平台下编译VTK的步骤。与Windows平台不同,我们很难获取到针对UNIX平台编译好的预编译二进制文件和可执行程序,因此我们必须自己编译VTK。(注意:查找一下vtkusers邮件列表及第一章“其他资源”一节介绍的资源,有些用户已经在Web上提供了编译好的二进制文件)。一般来说,这个过程还是相当简单的,根据机器的配置情况VTK的编译安装过程可能会花上一到四个小时【原书是说需要1到4小时,但是对于目前的计算机配置而言,VTK的编译时间不需这么长时间。】。对于高端、大内存、多处理器的机器来说,使用并行编译可以在十分钟内编译完C++和Tcl的二进制文件和可执行程序。绝大部分的时间都花在等待计算机编译源代码上。只需花费你10到30分钟的时间,第一步是确认是否有编译VTK所须的资源。为保险起见,最好空出300M以上的磁盘空间。对某些系统,如SGI,还得留出更多的空间,特别是如果你要编译VTK的调试版本。由于VTK是使用C++编写的,所以还需要C++编译器。一般的C++编译器如CC、g++或者ACC等。

如果想在Tcl/Tk、Python或者Java中使用VTK,还需要先下载并安装这些工具。Java JDK可以从Sun Microsystemshttp://ww.java.sun.com获得;如果打算使用Tcl/Tk,需要下载安装Tcl/Tk,可以从http://www.tcl.tk获得;Python可以从http://www.python.org下载。下面开始介绍如何在UNIX平台下编译VTK。

CMake

与Windows环境类似,在UNIX系统下编译VTK也需要借助CMake(见上一节关于CMake介绍部分)。CMake官网(http://www.cmake.org)上有用于不同版本UNIX系统的预编译二进制文件,可以直接下载使用,如果网站上没有提供的版本,就只有下载CMake的源代码,自行编译了。

安装CMake。下载CMake的预编译二进制文件(tar文件),解压到目标目录下(一般是/usr/local/)。确保“cmake”以及与它关联的可执行文件都在当前路径下,或者给出完整路径运行“cmake”。

编译CMake。如果无法下载到与自己的UNIX相对应的CMake文件,就需要自行编译安装CMake了。要编译安装CMake只要把CMake的源码包(可从http://www.cmake.org下载)解压到某个目录中,然后在那个路径下运行下面的命令即可:

./configure

make

makeinstall

如果没有root权限,可以省略上面的第三个步骤(也就是make install)。CMake可执行程序位于CMake/bin目录下。CMake提供了两种不同的可执行程序文件来配置VTK:ccmake提供了一个基于交互的终端,非常类似Windows平台下的cmake-gui程序;以及需要一步步回答一系列问题来完成整个配置过程cmake向导。

还得告诉CMake采用何种C++/C编译器。在多数UNIX系统中,可以通过下面的方式设置相关的信息:

setenvCXX /your/c++/compiler

setenvCC /your/c/compiler

或者:

exportCXX=/your/c++/compiler

exportCC=/your/c/compiler

否则CMake会自动检测编译器,假如机器上安装了多个编译器,CMake检测到编译器未必就是你想使用的。完成了这些设置后,在VTK源代码的同级目录中创建一个空的文件夹(比如叫VTK-bin),然后在这个目录下运行CMake,把刚才创建的目录以及VTK的源代码目录的路径作为参数传递给CMake,即:

cdVTK-bin

ccmake../VTK

或者

cdVTK-bin

cmake–i ../VTK

接下来两小节的内容简要介绍一下ccmake和cmake–i的区别。对配置脚本比较熟悉的UNIX开发人员会注意到CMake和configure在功能上是很相似的。但是用configure生成makefile文件时需要用命令行参数进行控制,而CMake则可以通过用户交互设置编译选项来生成makefile文件。

基于用户交互终端定制编译选项(ccmake)。ccmake有一个基于用户交互的简单的终端,允许用户根据不同的机器环境定制编译选项来设置VTK的编译环境。当用ccmake运行CMake时,有一系列选项可供选择、修改,以便用户根据不同的环境设置VTK的编译环境。大多数的选项CMake都可以设置合理的缺省值。可以通过键盘上的箭头按键选择某个选项,当某个选项呈高亮显示时按回车键即可修改该选项的值,如果选中的选项类型是布尔型的,按下回车键就可以更改该选项的值。选项的值修改完成后再按回车键可以确认该选项的值。当所有选项的值都设置完成后,按“c”键即可完成整个设置过程。接着CMake就会进入处理配置文件的过程,必要时CMake还会在顶端部分显示新的选项,比如,如果打开了选项VTK_WRAP_TCL,就会出现新的选项要求设置Tcl/Tk库文件以及包含的路径。新的选项出现时,应该重新设置它们的值,假如这些新的选项有合理的缺省值时,也可以采用这些缺省值。然后再按“c”键重新配置,直到没有新的选项出现。这个过程完成以后,就会有新的可用的命令出现:“Generate”和“Exit”。此时可以按“g”键让CMake生成makefile文件或者选择退出。以后如果还想重新改变CMake里某些选项的值的话,只需根据以上介绍步骤再次运行ccmake即可。

向导模式定制编译选项(cmake –i)。在某些平台下,ccmake提供的用户交互终端可能不好使,这时可以尝试运行带“-i”选项的cmake命令来激活设置向导。向导首先会询问是否使用“高级选项”,对于大部分用户来说很少会使用到“高级选项”。接着CMake会一步步地询问每个选项的取值,对于每一个选项都会列出它们的详细描述信息以及缺省值。大多数情况下,CMake会自动填充比较合理的缺省值。当然,有些时候CMake所填充的值未必都是正确的,比如OpenGL库文件没有位于预期的位置时,用户就必须手动设置相关选项的值。另外,默认情况下CMake不会创建对Tcl、Python和Java等语言进行封装的选项。如果想支持其中某种语言的话,应该打开选项VTK_WRAP_XXX,必要时还要告诉CMake相应库文件和头文件的位置。回答完CMake所有的问题以后,CMake就会自动生成makefile文件,VTK就可以开始进行编译了。以后如果想更改某些选项的取值的话,可以根据以上步骤再运行CMake向导。

编译源代码

运行完CMake后就会生成makefile文件,然后键入make命令,开始编译VTK。有些make工具,如GNUmake(gmake)支持并行编译(gmake–j)。尽可能使用并行编译,即使在单处理器系统,因为文件的读写操作是编译过程最大的瓶颈,处理器可以同时处理多个编译进程。如果在编译过程中遇到什么问题,可以到vtkusers邮件列表(参考第一章“其他资源”一节)寻求帮助,也向Kitware公司获取商业支持。

多平台下编译VTK

如果想在多个UNIX平台下编译VTK,可以给每个平台分别复制一份完整的VTK源文件目录,然后根据以上介绍的步骤进行编译;或者可以只复制一份VTK源文件目录,然后在另外一个目录下为每个平台都生成一份目标代码、库文件以及可执行文件。后一种方法需要为每个平台创建一个空的编译目录,比如vtk-solaris。假定VTK源文件的目录跟新创建的空的编译目录处于同一层目录结构中,改变当前路径(cd命令)到这个新建的目录中,按照类似以下的命令运行CMake:

cd/yourdisk

ls(输出是VTK vtk-solaris vtk-sgi)

cdvtk-solaris

cmake– i ../vtk

或者

ccmake../VTK

就会在目录vtk-solaris中生成makefile文件。这样就可以根据上面提到的步骤编译VTK。

安装VTK

现在VTK已经编译好了,可执行文件和库文件都在编译目录的bin/子目录中。如果打算在UNIX系统中和一个以上的开发者共享这些库文件,又有root权限的话,可以运行makeinstall命令,如果没有修改CMake配置选项中的CMAKE_INSTALL_PREFIX的值,则这个命令会把VTK安装到/usr/local中。运行makeinstall命令会复制编译和运行VTK应用程序时所需的所有文件到一个其他用户都能使用的目录下。

这就是在UNIX平台下编译和安装VTK的完整步骤,如果你想了解更多关于CMake的内容,可以登录http://www.cmake.org或者购买Kitware公司出版的图书《MasteringCMake》。第3章将会详细讲解如何运行VTK的例子以及创建自己的VTK应用程序。


【第2章 完】