DCMTK3.6.3编译,安装[Windos10平台+VS2017+Cmake3.11]_annjeff的博客-程序员ITS304

技术标签: VS生成DCMTK项目  DCMTK  医学图像处理  Cmake编译DCMTK  

   Windows10平台Cmake3.11+VS2017编译、安装DCMTK[MD版本]库

一、前言

       最近由于项目需要,开始接触DCMTK库,作为一个小白在网上一顿狂搜,看了几天的程序员ITS304,终于有了一点头绪。在这个过程中我遇到了很多问题,有一部分自己看程序员ITS304解决掉了,还有一些问题是在技术讨论群里询问,在许多热心的前辈帮助下解决了问题。十分感谢前辈们写的DCMTK博客给了我指导与方向,同时感谢前辈抽出时间回答我的问题。

        感谢【柳北风儿~~~~~~~欲宇仙炅】博主的文章,【嗯哇的博客】等博主的文章,文末会给出这些前辈的博客的地址。感谢网友【槑】、【PacsDeveloper】等多位的大哥热心帮助。

        由于我的项目需要在Qt Creator5.10里使用DCMTK库,而网上关于这部分的资源很少,忙了好多天才解决了问题,写下此文一是向帮助我的前辈致敬、二是帮助后来的新人花更少的时间解决问题。由于本人仍然算是小白,希望路过的大神对本文错误的地方予以指正,或给出意见、建议。

        我的邮箱是:[email protected],有需要交流的同学可以给我发邮件。

二、基础理论知识   

  1. /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在非必要时最好也不要采用了。         [此条目摘自:柳北风儿的博客]
  2. /MD 与 /MT 用于Release 版本,前者表示链接时,不链接VC的运行时库(msvcrt.lib),而采用动态(msvcrtXX.dll,其中XX表示使用的版本);相应地,后者则表示静态链接VC的运行时库,这样的结果是链接生成的的目标模块体积明显比前者要大一些。

    /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/[email protected]

 

 

        

           

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/annjeff/article/details/80899762

智能推荐

Oracle弃用Nashorn JavaScript引擎_糖糖糖糖糖糖糖糖糖糖糖糖糖糖糖糖糖糖的博客-程序员ITS304

Oracle通过JDK增强提案(JEP)355宣布弃用Nashorn JavaScript引擎,最终将从未来所有的JDK中删除。ECMAScript的语言结构变化太快,Oracle发现,维护Nashorn JavaScript引擎变得非常困难。\\Nashorn最初是在JDK 8中引入的,用于取代Rhino脚本引擎。当其发布时,Nashorn是ECMAScript-262 5.1的完整实现,增强了...

pajek06-09:中心度_qq_34322002的博客-程序员ITS304

1、局部中心度2、整体中心度3、Network>Create Vector>Centrality>Degre>All4、中心度:点的中心度中心势:网络的中心度

7.(开发工具篇kibana)Kibana安装与启动_地图之家家长的博客-程序员ITS304_kibana开发工具

听老人家说:多看美女会长寿前言:Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。1、Kibana官方下载地址https://www.elastic.co/cn/downloads/kibana一定要装与El

性能优化——内存泄漏(3)代码分析篇_GitLqr的博客-程序员ITS304

一、简述在上一篇《性能优化——内存泄漏(2)工具分析篇》中,介绍了如何使用工具帮助我们检查APP中是否存在内存泄漏、及如何定位到内存泄漏,但项目并不能完全依赖工具来检查,毕竟定位内存泄漏比较麻烦,还不如在开发时就考虑到内存泄漏问题,尽可能减少内存泄漏,后续优化才不会那么痛苦。下面就来看看开发中,哪些代码可能造成内存泄漏,及避免内存泄漏的对应解决方案。二、代码分析1、静态变量引起的内存泄露1)错误示例

正则校验金额_程序原SpringCloud的博客-程序员ITS304_正则校验金额

只能正数金额:(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)允许负数金额:(^-?[1-9](\d+)?(\.\d{1,2})?$)|(^-?0$)|(^-?\d\.\d{1,2}$)@ApiModelProperty(value = "最高收取的手续费(单位 元)")@NotNull(message = "最高收取的手续费不能为空")@Digits(integer = 5, fraction = 2, message = "amo

linux mint下安装hostapd并配置802.1X认证_代码狙击者的博客-程序员ITS304

        本实验的目的是在Linux Mint18的环境下安装hostapd来实现802.1x,其中mint作为路由的功能,即将hostapd设置为radius客户端。而要入网的是一部android手机,认证的radius服务器是运行在centos6.8上的freeradius。【hostapd简介】         hostapd 是用户控件的守护进程用于无线接入点(AP)和授权服...

随便推点

ffmpeg代码分析(1)--编译裁剪_茜茜她老爹的博客-程序员ITS304_ffmpeg 裁剪编译

我们很少使用到ffmpge完整的功能库,大部分时候,只需要特定的编解码 传输协议,那么该怎么裁剪ffmpeg呢?答案就是configure命令。configure 是一个文本文件,打开以后我们会发现它有很多命令,如下Help options:  --help                   print this message  --list-decoders        

Unity项目常见Lua解决方案性能比较_weixin_33946605的博客-程序员ITS304

测试说明Unity不支持热更新这事情一直是谜一样的痛点,特别是在作者第一个项目上线之后,发现每次更新代价实在太大,可惜官方Roadmap上迟迟没有出现这个功能。UWA之前分享过 Android平台热更新解决方案,直接替换dll是一种解决方式(但iOS上因为使用IL2CPP故而无法实现,而且这事本质上为商业原因而非技术问题)。除此之外还有一个比较常见的...

使用Git连接Gitee进行Unity开发项目_funny囧t的博客-程序员ITS304_gitee unity

将项目上传到Gitee进行协同开发如图建立一个仓库下载并安装Git,可看网上的教程在所需上传到Gitee的项目文件目录右键并选择Git Bash输入git init,将该文件目录作为本地git库,此时会生成两个隐藏文件,目录出现master分支输入git.remote add Project https://gitee.com/rookiestudios/Project(这个Project是你在Gitee新建的仓库名称).git,将git关联到仓库并且命名输入git pull Project

算法竞赛入门经典——高效算法——巨人与鬼_qq_27559181的博客-程序员ITS304

巨人与鬼:题目:一组n个巨人正与n个鬼进行战斗,每个巨人的武器是一个质子炮, 它可以把一串质子流射中鬼而把鬼消灭。质子流沿直线行进,在击中鬼时就终止。巨人决定采取下述策略。他们寻找鬼配对,以形成n个巨人─鬼对,。然后每个巨人同时向他选取的鬼射出一串质子流。我们知道,让质子流互相交叉是很危险的。因此巨人选择的配对方式应该使质子流都不会交叉。假定每个巨人和每个鬼的位置都是平面上的一个固定点,并且没有三...

ofbiz项目编译及idea启动_东泽312的博客-程序员ITS304_ofbiz启动

idea2021版启动ofbiz项目1 进入项目根目录2 通过ant清理项目3 通过ant编译项目4 需要确保编译成功5 idea引入ofibz项目记录下来idea是如何导入和启动ofbiz项目的1 进入项目根目录2 通过ant清理项目3 通过ant编译项目4 需要确保编译成功5 idea引入ofibz项目确认下根路径没有问题几个要修改的地方添加vm选项-server -XX:PermSize=512M -XX:MaxPermSize=1024m编译完成后

推荐文章

热门文章

相关标签