转载自https://blog.csdn.net/annjeff/article/details/80899762
一、前言
最近由于项目需要,开始接触DCMTK库,作为一个小白在网上一顿狂搜,看了几天的CSDN博客,终于有了一点头绪。在这个过程中我遇到了很多问题,有一部分自己看CSDN博客解决掉了,还有一些问题是在技术讨论群里询问,在许多热心的前辈帮助下解决了问题。十分感谢前辈们写的DCMTK博客给了我指导与方向,同时感谢前辈抽出时间回答我的问题。
感谢【柳北风儿~~~~~~~欲宇仙炅】博主的文章,【嗯哇的博客】等博主的文章,文末会给出这些前辈的博客的地址。感谢网友【槑】、【PacsDeveloper】等多位的大哥热心帮助。
由于我的项目需要在Qt Creator5.10里使用DCMTK库,而网上关于这部分的资源很少,忙了好多天才解决了问题,写下此文一是向帮助我的前辈致敬、二是帮助后来的新人花更少的时间解决问题。由于本人仍然算是小白,希望路过的大神对本文错误的地方予以指正,或给出意见、建议。
我的邮箱是:[email protected],有需要交流的同学可以给我发邮件。
二、基础理论知识
/MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。
/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。 [此条目摘自:柳北风儿的博客]
/MTD与/MDD 用于Debug版本,其它规则同上。[此条目摘自:https://blog.csdn.net/cjqpker/article/details/46713791]
三、必要软件下载安装
1.Cmake(cmake-gui)软件下载安装
到 https://cmake.org/download/可以进行cmake软件的下载安装,同其他Windows软件一样,根据提示安装即可,新手可根据其他专门讲Cmake软件的博客进行安装。
2.DCMTK库的下载及编译
DCMTK的官网:https://dcmtk.org/dcmtk.php.en提供DCMTK源码的下载,以及必要的依赖库。
图 3-1 DCMTK及帮助文档下载
图 3-2 根据自己的需求选择下载依赖库
因为我的系统为Windows 10 64bit,VS为2017版本故选择了如图3-2所示的支持库。下载源码及支持库后,把源码及支持库解压到本地磁盘。例如:我在D盘新建了目录DCMTK,解压源码路径为D:\DCMTK\dcmtk3.6.3。解压支持库路径为D:\DCMTK \dcmtk-3.6.3-win64-support_MD-msvc-15.0。
上述DCMTK提供的官方文档为英文版的HTML网页压缩包,解压用浏览器打开即可以使用。
四、使用Cmake工具将DCMTK源码构建为VS的工程
1.事先规划好DCMTK源码Cmake后生成二进制文件存放地点,以及DCMTK安装位置。本人于D:\DCMTK\文件夹下,新建了dcmtk-3.6.3-bin用来存放DCMTK经过Cmake编译后生成的二进制文件,这个文件夹会生成VS工程,使用VS打开工程可以看到源码。D:\DCMTK\dcmtk-3.6.3-install\文件夹下来安装DCMTK库。
图 4-1 DCMTK目录规划
2.关闭VS,打开Cmake(cmake-gui),在 Where is the source code:选择DCMTK源码解压路径,在Where to build the binaries:选择我们新建的dcmtk-3.6.3-bin作为二进制文件的存放目录。
图 4-2 开始Configure
3.为工程选择一个编译器,这里我选择Visual Studio 15 2017 Win64
图 4-3 选择编译器
点击Finish后将是一个漫长的过程,看电脑的配置,我大概编译了8分钟的样子。
4.当看到Configuring done的时候第一次编译结束,用时较长,此时你会发现好多 -not find,不用担心,接下来按步骤操作即可。
图 4-4 此时第一编译结束
5.选择Groupd分组,此时Cmake工具会帮我们把当前的项按首单词分成五个组,在对应的组下进行修改比较方便。我们进入CMAKE组下 修改DCMTK库的安装位置,默认安装在C盘下。建议修改为D盘或其他盘下,否则在VS生成项目时,需要以管理员的权限进行运行否则会出现失败。此处我按照自己原来的规划把安装位置放于D:/DCMTK/dcmtk-3.6.3-install目录下。即修改CMAKE_INSTALL_PREFIX=D:/DCMTK/dcmtk-3.6.3-install。
图 4-5修改安装位置
6.接下来进入DCMTK分组下,把DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS 后面的√去掉,在选择MD/MDd支持库时,这一步尤为重要。
图 4-6 修改DCMTK组选项
7.如果你需要比较完整的使用DCMTK库,需要把以下6项进行选择,选择后DCMTK功能比较完善。
图 4-7 为DCMTK添加库
8.如果你选择了第7步骤中的几个选项,此时你需要在WITH下面把各个对应的附加库的源文件路径添加到对应的项目下。记住是DCMTK官网下载的dcmtk-3.6.3-win64-support_MD-msvc-15.0其他版本根据自己实际情况亦可。
库 | 路径 |
WITH_LIBICONVINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\libiconv-1.15 |
WITH_LIBPNGINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\libpng-1.6.34 |
WITH_LIBTIFFINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\libtiff-4.0.9 |
WITH_LIBXMLINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\libxml2-2.9.7 |
WITH_OPENSSLINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\openssl-1.1.0g |
WITH_ZLIBINC | D:\DCMTK\dcmtk-3.6.3-win64-support_MD-msvc-15.0\zlib-1.2.11 |
图 4-8 把添加的库对应的库文件位置配置
9.选择Advanced,如果我们要编译Debug版本,记住看一下CMAKE_CXX_FLAGS_DEBUG后面是不是MDd,因为MDd是Debug版本的。
图 4-9 确认MDd库信息
10.确认无误后,开始第二次进行Configure,这一次Configure速度比较快。
图 4-10 第二次进行Configure
11.Configure结束后,我们开始Generate,当Generate结束后,Cmake步骤即结束,此时在DCMTK-bin目录下已经产生了VS的项目文件,接下来的操作是在VS里面进行。
图 4-11 Generator
五、VS下进行DCMTK的编译和安装
1.在D:\DCMTK\dcmtk-3.6.3-bin目录下会生成DCMKT.sln,使用VS打开DCMTK.sln。
图 5-1 使用VS打开Cmake生成的项目
2.随便在一个项目上右击->属性->常规->字符集查看字符集是否为多字节字符集。
图 5-2 查看字符集
3.同时在 C/C++ -->代码生成下查看运行库是否为 MDd。
图 5-3 查看运行库
4.生成-->批生成
图 5-4 开始批生成
5.选择ALL_BUILD Debug -->生成 ,只选这一项,这项的过程比较慢,耐心等待或做点其他的事情。
图 5-5 开始ALL_BUILD
6.长时间的等待后你会发现成功95个,这是便可以开始下一步。
图 5-6 ALL_BUILD结束
7.再次进入【批生成】选择INSTALL 开始生成,此时会在DCMTK-3.6.3-install生成安装文件。
图 5-7 开始Install
8.INSTALL结束。
图 5-8 Install完成
9.DCMTK安装成功后会在安装目录生成以下文件。
图 5-9 DCMKT安装目录下生成的文件目录
[嗯哇的博客]:https://blog.csdn.net/chaoenhu/article/category/7213130
[柳北风儿~~~~~~~欲宇仙炅]:http://blog.163.com/qimo601@126