VS2012编译安装ITK-4.7.2_支持Qt5.2.1

来源:互联网 发布:linux 删除过期文件 编辑:程序博客网 时间:2024/05/16 11:28

    计算机系统: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.Libshell32.lib两个库及其目录就可以解决上述的问题,.pro的库配置如下:

INCLUDEPATH += E:/ITK/InsightToolkit-4.7.2_install/include/ITK-4.7QMAKE_LIBDIR += E:/ITK/InsightToolkit-4.7.2_install/lib\            C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x64LIBS += shell32.lib\        AdvAPI32.LibLIBS += 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(一)

[2]ITK在vs2010下安装、搭建

[3]ITK进行日志-2  

[4]ITK在VS2010中的安装和第一个例子

[5]ITK+VTK+Python的整合及例子程序

[6]VC2008编译问题,如何设置

[7]error: LNK1120: 5 unresolved externals

[8]__imp__CommandLineToArgvW

0 0