VS配置VTK5101Cmake28122.docx
《VS配置VTK5101Cmake28122.docx》由会员分享,可在线阅读,更多相关《VS配置VTK5101Cmake28122.docx(10页珍藏版)》请在冰豆网上搜索。
![VS配置VTK5101Cmake28122.docx](https://file1.bdocx.com/fileroot1/2023-1/22/7d8bf4e4-429e-44c3-8dac-ff2440856d22/7d8bf4e4-429e-44c3-8dac-ff2440856d221.gif)
VS配置VTK5101Cmake28122
VS2010配置VTK5.10.1Cmake2.8.12.2
2016年4月22日
基于:
VS2010安装配置vtkVTK5.10.1安装配置教程
VTK在VS2010下的安装方法
在win8.1,win10均成功,.netFramework是4.0。
希望大家按部就班,少走弯路,不要操之过急。
感谢原文作者的工作。
1.安装好VS2010
必须下载:
vtk-5.10.1.zip源程序
vtkdata-5.10.1.zip数据
cmake-2.8.12.2-win32-x86.zip
(vtk相关安装程序下载(官网):
http:
//vtk.org)
(cmake程序下载(官网):
http:
//www.cmake.org/HTML/Index.html)
2.将vtk-5.10.1.zip解压到D:
\ProgramFiles\VTK\VTKsourcecode,将vtkdata-5.10.1.zip解压到D:
\ProgramFiles\VTK\VTKdata
新建一个文件夹D:
\ProgramFiles\VTK\VTKbin\
3.解压cmake-2.8.12.2-win32-x86.zip,运行{解压目录}\bin\cmake-gui.exe,
设置soursecode目录为D:
\ProgramFiles\VTK\VTKsourcecode\,
build目录为D:
\ProgramFiles\VTK\VTKbin\
按configure按钮,选VisualStudio10编译器。
需要耐心等待,一般忽略其中的警告。
勾选Advanced再按configure,可以看到或者搜索到某项为:
vtk_use_guisupport,选择它,再按configure,选vtk_use_mfc,再configure,configure的次数是无所谓的。
vtk_data_root:
目的是告诉cmake,vtk需要的数据都在哪里,我们的数据在D:
ProgramFiles\VTK\VTKdata
cmake_install_prefix:
虽然网上说默认就好。
但是我安装时出了问题。
强烈建议该项的位置填VTK源程序和数据等文件的上一级文件的位置,即若vtk-5.10.1.zip解压到D:
\ProgramFiles\VTK\VTKsourcecode,则此处填D:
\ProgramFiles\VTK。
build_examples:
就是询问是否编译vtk中的例子,你在看这个教程,说明肯定是初次用VTK,建议选上。
build_shared_libs:
建议选On。
如果设置为off,就只会生成lib文件,用于开发肯定是够了。
如果设置为on,将会多生成dll文件,这些dll需要拷到windows/system目录下。
如果用静态库编程,即off时,应用程序可以独立运行,尺寸也比较大,如果用动态库编程,即on时,应用程序必须找到动态库才能运行,但尺寸可以做得比较小。
建议选On,我试过选OFF,所谓的静态编译,但之后新建一个项目时,还是会出现找不到文件的问题。
vtk_use_parallel:
对于想用vtk做并行计算的朋友,要把这个选上,对于只想学学vtk的,保持默认off
所有项目会变成灰色后后可以点击Generate,完成时会提示Generatingdone,此时关闭cmake。
4.用vc++2010打开D:
\ProgramFiles\VTK\VTKbin\Utilities\MaterialLibrary目录下的MaterialLibrary.sln文件,右键点击All_Build选择重新生成。
5.若build_shared_libs选择On,把D:
\ProgramFiles\VTK\VTKbin\bin\Debug里生成的vtksys.dll文件拷到windows/system目录下。
或者打开VS2010的属性管理器(视图->其他窗口->属性管理器),双击任意“Microsoft.Cpp.Win32.user”,弹出属性页,在里面VC++目录的LibraryDirectories中将bin文件夹中的Debug包括进去(建议两种方法都用)。
6.打开D:
\ProgramFiles\VTK\VTKbin目录下的VTK.sln,右键点击All_Build选择重新生成。
若build_shared_libs选择On,中途涉及MFC的示例会出错,生成成功两百多个,失败五六个。
对应的解决办法为:
错误①Link错误:
a.在SolutionExplorer中分别找到vtkDLG、vtkMDI、vtkSDI、vtkMFC这四个项目,右键—>Properties—>ConfigurationProperties—>Linker—>Input—>在AdditionalDependencies中添加..\..\..\..\..\bin\Debug\vtkIO.lib
b.再找到Win32SampleMFC这个项目,与以上类似地在AdditionalDependencies中添加..\..\..\..\bin\Debug\vtkIO.lib
这样,就为这些项目加入了vtkIO.lib库。
上述方法可能失效,可采用下面的方法
在vtkDLG、vtkMDI、vtkSDI、vtkMFC、Win32SampleMFC项目的CMaklist.txt中修改。
打开CMakelist.txt,在TARGET_LINK_LIBRARIES中添入vtkIO。
例如vtkSDI的CMakelist.txt中,TARGET_LINK_LIBRARIES(vtkSDIvtkMFC)应改为TARGET_LINK_LIBRARIES(vtkSDIvtkMFCvtkIO)。
其他的项目修改类似。
错误②
Thisfilerequires_WIN32_WINNTtobe#definedatleastto0x0403.Value0x0501orhigherisrecommended.
解决办法为:
找到五个工程:
vtkDLG、vtkMDI、vtkSDI、Win32SampleMFC、vtkMFC
a.打开前四个工程源文件中的stdAfx.h,
在四个工程下的项中的.h文件中可以找到。
另外可以打开D:
\ProgramFiles\VTK\,利用文件搜索功能搜寻,找到后用VS2010打开修改(本人用后者,感觉较快)。
b.在vtkMFC工程下的中,找到vtkMFCWindow.cpp打开修改
4个stdafx.h如下修改
//Modifythefollowingdefinesifyouhavetotargetaplatformpriortotheonesspecifiedbelow.
//RefertoMSDNforthelatestinfooncorrespondingvaluesfordifferentplatforms.
#ifndefWINVER //AllowuseoffeaturesspecifictoWindows95andWindowsNT4orlater.
#defineWINVER 0x0601 //ChangethistotheappropriatevaluetotargetWindows98andWindows2000orlater.
#endif
#ifndef_WIN32_WINNT //AllowuseoffeaturesspecifictoWindowsNT4orlater.
#define_WIN32_WINNT 0x0601 //ChangethistotheappropriatevaluetotargetWindows98andWindows2000orlater.
#endif
#if_MSC_VER>=1300
#ifndef_WIN32_WINDOWS //AllowuseoffeaturesspecifictoWindows98orlater.
#define_WIN32_WINDOWS 0x0601 //ChangethistotheappropriatevaluetotargetWindowsMeorlater.
#endif
#endif
#ifndef_WIN32_IE //AllowuseoffeaturesspecifictoIE4.0orlater.
#define_WIN32_IE 0x0800 //ChangethistotheappropriatevaluetotargetIE5.0orlater.
#endif
粗字对应的是win7版本
vtkMFCWindow.cpp中的部分代码:
//AllowuseoffeaturesspecifictoWindows95andWindowsNT4orlater.
#ifndefWINVER
#defineWINVER 0x0601
#endif
//Define_WIN32_WINNTand_WIN32_IEtoavoidthefollowingerrorwithVisual
//Studio2008SP1:
//"C:
\ProgramFiles\MicrosoftSDKs\Windows\v6.0A\include\sdkddkver.h(217):
//fatalerrorC1189:
#error:
_WIN32_WINNTsettingsconflictswith_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
此时,应该没有问题了。
右击vtkmfc项目,按“仅用于该项目”-“仅重新生成该项目”,这时\vtk\vtkbin\bin\Debug终于会有vtkMFC.lib等文件生成。
再同理操作vtkDLG、vtkMDI、vtkSDI、Win32SampleMFC,最后一个可能失败,忽略。
若还是出现cannotfindvtkMFC.lib则是由于cmake阶段未勾选vtk_use_mfc,关闭当前所有窗口。
清空文件夹D:
\ProgramFiles\VTK\VTKbin\的内容,回到第3步。
7.将D:
\ProgramFiles\VTK\VTKbin\bin\debug这个文件夹选择此中所有的DLL 后缀的文件全部复制到c:
\windows\system32 (调试时推荐),或者拷贝到VC项目可执行文件所在位置(即系,你自己的项目的调试目录,安装到其他机器时一并拷贝)。
8. 用VS2010打开D:
\ProgramFiles\VTK\VTKbin\Examples\All\VTKExamples.sln,选择Cone项目,右键setasactiveproject(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:
\ProgramFiles\VTK\VTKbin\bin\debug
若出现无法找到vtkRendering.dll等错误,则是由于该环境变量未配置正确。
9.2项目属性->配置属性->VC++目录->包含目录 ,拷入入下述内容:
D:
\ProgramFiles\VTK\VTKbin;
D:
\ProgramFiles\VTK\VTKbin\bin;
D:
\ProgramFiles\VTK\VTKsourcecode\GenericFiltering;
D:
\ProgramFiles\VTK\VTKsourcecode\Common;
D:
\ProgramFiles\VTK\VTKsourcecode\IO;
D:
\ProgramFiles\VTK\VTKsourcecode\Filtering;
D:
\ProgramFiles\VTK\VTKsourcecode\Rendering;
D:
\ProgramFiles\VTK\VTKsourcecode\Graphics;
D:
\ProgramFiles\VTK\VTKsourcecode\VolumeRendering;
D:
\ProgramFiles\VTK\VTKsourcecode\Imaging;
D:
\ProgramFiles\VTK\VTKsourcecode\Hybrid;
D:
\ProgramFiles\VTK\VTKsourcecode\GUISupport;
D:
\ProgramFiles\VTK\VTKsourcecode\Utilities;
D:
\ProgramFiles\VTK\VTKbin\Utilities;
D:
\ProgramFiles\VTK\VTKsourcecode\Parallel;
D:
\ProgramFiles\VTK\VTKsourcecode\Widgets
( 注意:
网上很多配置方法在Additional include directories(附加包含路径)没有添加D:
\ProgramFiles\VTK\VTKbin;D:
\ProgramFiles\VTK\VTKbin\bin; 结果出现错误提示:
无法打开包括文件:
“vtkConfigure.h”:
No such file or directory)
9.3位于项目属性->链接器->输入->附加依赖项 ,拷入下述内容(下面有些lib文件已经被附加进去了,就不需要再添加进去):
opengl32.libkernel32.libuser32.libgdi32.libwinspool.libcomdlg32.libadvapi32.libshell32.libole32.liboleaut32.libuuid.libodbc32.libvtkCommon.libvtkDICOMParser.libvtkexoIIc.libvtkexpat.libvtkFiltering.libvtkfreetype.libvtkftgl.libvtkGenericFiltering.libvtkGraphics.libvtkHybrid.libvtkImaging.libvtkIO.libvtkjpeg.lib vtkNetCDF.libvtkpng.libvtkRendering.libvtksys.libvtktiff.libvtkVolumeRendering.libvtkWidgets.libvtkzlib.lib
(建议把D:
\ProgramFiles\VTK\VTKbin\bin\debug中所有的lib文件都填进去)
9.4调试,运行,可以看到运行窗口。
像Cannotopenincludefile:
'vtkConeSource.h':
这样的错误都是上面三大步没走对或dll没拷到windows/system下造成的。
要建立新项目,必须重新配置三大步,因为那三步都是Projectsetting里的,新项目没有默认这些设置。
如果某个项目再提示缺什么lib或.h的话,再临时加上去就行了。