计算机系统:Win8.1(64 bit)
ITK版本:4.7.2
Cmake版本:3.1.0
编译器:MSVC 2012(64 bit)
Qt Creator:3.0.1(64 bit)
Qt版本:5.2.1(64 bit)
1 目标
使用VS2012编译ITK-4.7.2,使其能和VTK结合,并且支持python语言,并且能够在Qt开发环境中进行开发。
2 配置
参考资料[2]对ITK的编译已经做了很好的说明,再此不赘言。这里仅仅贴出配置过程中主要的选项设置:
2.1 一般配置
BUILD_SHARED_LIBS [ON]
BUILD_EXAMPLES [ON]
BUILD_TEST [ON]
CMAKE_INSTALL_PREFIX [ITK的安装目录]
ITKV3_COMPATIBILITY [ON]
Module_ITKVtkGlue [ON]
VTK_DIR [VTK库目录(例如E:/VTK/VTK-6.2.0_install/lib/cmake/vtk-6.2)]
Module_ITKReview [ON]
说明:如果不启动Module_ITKReview,则编译安装后不支持LabelGeometryImageFilter。
2.2 支持Python
ITK_WRAP_PYTHON [ON]
ITK_LEGACY_SLIENT [ON]
说明:根据参考资料[2]的说明,支持Python时要开启ITK_WRAP_PYTHON选项。另外,在配置过程中提示要开启ITK_LEGACY_SLIENT选项。
注意:开启Python支持有可能导致下面的编译失败,如果不是及其想要这个特性,建议去掉。
3 编译
在编译的过程中,如果联网,则会下载一些文件,例如:
Performing download step (download, verify and extract) for 'GCC_XML'
1> -- downloading...
1> src='http://itk.org/files/gccxml/gccxml-2014-08-06.tar.bz2'
1> dst='E:/ITK/InsightToolkit-4.7.2_build/Wrapping/Generators/GccXML/gccxml/src/gccxml-2014-08-06.tar.bz2'
如果网络不通,将会出错:
1>CUSTOMBUILD : error : downloading 'http://itk.org/files/gccxml/gccxml-2014-08-06.tar.bz2'
1> failed
说明:1) 上述提示是开启了Python支持的情况,如果没有支持Python,是没有上述的下载过程的。
2) 如果开始了Python支持,本文的测试暂时是失败的,关闭Python支持,编译可以成功。
4 测试
使用Visual Studio 2012创建一个简单的ITK工程,利用上面编译好的库进行测试可以成功。但是使用Qt Creator(配置的编译器是MSVC2012)创建ITK工程以进行测试时,提示错误:
itksys-4.7.lib(SystemTools.obj):-1: error: LNK2019: 无法解析的外部符号 __imp_RegCloseKey,该符号在函数 "public: static bool __cdecl itksys::SystemTools::GetRegistrySubKeys(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &,enum itksys::SystemTools::KeyWOW64)" (?GetRegistrySubKeys@SystemTools@itksys@@SA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@4@W4KeyWOW64@12@@Z) 中被引用
4.1 错误原因
根据参考资料[6][7]的提示,这是因为没有链接到advapi32.lib。其实,仔细看Cmake配置时发现,有个项目CMAKE_C_STANDARD_LIBRARIES,其内容为:
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib
当使用Visual Studio 2012对ITK项目进行编译时,会自动链接到上面的库,但是当使用Qt Creator时,情况不一样,需要手动指定上述的库名和路径。经过查找发现,上述的库文件都在目录C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64中。
4.2 解决方法
经过测试发现,其实只要指定AdvAPI32.Lib和shell32.lib两个库及其目录就可以解决上述的问题,.pro的库配置如下:
INCLUDEPATH += E:/ITK/InsightToolkit-4.7.2_install/include/ITK-4.7
QMAKE_LIBDIR += E:/ITK/InsightToolkit-4.7.2_install/lib\
C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x64
LIBS += shell32.lib\
AdvAPI32.Lib
LIBS += ITKBiasCorrection-4.7.lib\
ITKBioCell-4.7.lib\
ITKCommon-4.7.lib\
ITKDeprecated-4.7.lib\
ITKDICOMParser-4.7.lib\
itkdouble-conversion-4.7.lib\
ITKEXPAT-4.7.lib\
ITKFEM-4.7.lib\
itkgdcmCommon-4.7.lib\
itkgdcmDICT-4.7.lib\
itkgdcmDSED-4.7.lib\
itkgdcmIOD-4.7.lib\
itkgdcmjpeg12-4.7.lib\
itkgdcmjpeg16-4.7.lib\
itkgdcmjpeg8-4.7.lib\
itkgdcmMSFF-4.7.lib\
ITKgiftiio-4.7.lib\
itkhdf5-4.7.lib\
itkhdf5_cpp-4.7.lib\
ITKIOBioRad-4.7.lib\
ITKIOBMP-4.7.lib\
ITKIOCSV-4.7.lib\
ITKIOGDCM-4.7.lib\
ITKIOGE-4.7.lib\
ITKIOGIPL-4.7.lib\
ITKIOHDF5-4.7.lib\
ITKIOImageBase-4.7.lib\
ITKIOIPL-4.7.lib\
ITKIOJPEG-4.7.lib\
ITKIOLSM-4.7.lib\
ITKIOMesh-4.7.lib\
ITKIOMeta-4.7.lib\
ITKIOMRC-4.7.lib\
ITKIONIFTI-4.7.lib\
ITKIONRRD-4.7.lib\
ITKIOPNG-4.7.lib\
ITKIOSiemens-4.7.lib\
ITKIOSpatialObjects-4.7.lib\
ITKIOStimulate-4.7.lib\
ITKIOTIFF-4.7.lib\
ITKIOTransformBase-4.7.lib\
ITKIOTransformHDF5-4.7.lib\
ITKIOTransformInsightLegacy-4.7.lib\
ITKIOTransformMatlab-4.7.lib\
ITKIOVTK-4.7.lib\
ITKIOXML-4.7.lib\
itkjpeg-4.7.lib\
ITKKLMRegionGrowing-4.7.lib\
ITKLabelMap-4.7.lib\
ITKMesh-4.7.lib\
ITKMetaIO-4.7.lib\
itkNetlibSlatec-4.7.lib\
ITKniftiio-4.7.lib\
ITKNrrdIO-4.7.lib\
itkopenjpeg-4.7.lib\
ITKOptimizers-4.7.lib\
ITKOptimizersv4-4.7.lib\
ITKPath-4.7.lib\
itkpng-4.7.lib\
ITKPolynomials-4.7.lib\
ITKQuadEdgeMesh-4.7.lib\
ITKSpatialObjects-4.7.lib\
ITKStatistics-4.7.lib\
itksys-4.7.lib\
itktiff-4.7.lib\
itkv3p_lsqr-4.7.lib\
itkv3p_netlib-4.7.lib\
itkvcl-4.7.lib\
ITKVideoCore-4.7.lib\
ITKVideoIO-4.7.lib\
itkvnl-4.7.lib\
ITKVNLInstantiation-4.7.lib\
itkvnl_algo-4.7.lib\
ITKVTK-4.7.lib\
ITKVtkGlue-4.7.lib\
ITKWatersheds-4.7.lib\
itkzlib-4.7.lib\
ITKznz-4.7.lib
5 总结
对比《VS2012编译安装VTK-6.2.0_支持Qt5.2.1》可以发现,与VTK的配置不同的是,在使用CMake配置阶段,并没有专门针对Qt的配置。ITK关于Qt的支持,是不用经过特别配置的,只是在编译项目时,需要指定所依赖的系统库。
参考资料
[1]win7 64位下VS2010/VS2012 下安装 ITK/VTK(一)
[3]ITK进行日志-2