一、运行环境:WIN7 32bit + VisualStudio2008 + dcmtk3.6.0 + Cmake2.8.8

或者 WIN7 64bit

二、准备工作

1)MD/MT的知识储备:

/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)下载软件:

dcmtk-3.6.0 .zip;

dcmtk-3.6.0-win32-i386-support_MD.zip(注意,要下载***support_MD的压缩文件,而不要下载上面单独列出来的支持库)。我选择的MD,因为我的软件项目都是基于MD的运行时库。(您也可以选择dcmtk-3.6.0-win32-i386-support_MT.zip,如果您的项目是基于MT。通过项目属性的C/C++->code generation 可以更改运行时库)将这些压缩文件解压缩到硬盘上一个单独的文件夹里,我的解压缩目录是D:\DCMTK\。

③从cmake官方网站下载cmake的安装文件,我下载的是cmake-2.8.8-win32-x86.exe。将其安装到计算机任意目录下。

dcmtk-3.6.0-html-help.zip,dcmtk html版本帮助文档,CHM版本暂时还未出。

三、安装过程

1. 将支持库中的相应lib文件,include文件,bin文件拷贝到VS2008安装目录的相应文件夹下。

A.在解压得到的支持库的文件夹下搜索_d.lib文件(xxx_d.lib为DEBUG版本的支持库,xxx_o.lib为RELEASE版本支持库),应该会得到7个结果,将这些文件复制到一个单独的文件夹下,并把它们的名字中的_d去掉,例如将zlib_d.lib重命名为zlib.lib。将重命名后的文件拷贝至VS2008安装目录下的lib文件夹下,在我的win7 32bit电脑上是C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\。(win7 64bit操作系统是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\)

B. 在解压得到的支持库的文件夹下搜索include,应该得到5个文件夹,将这些文件夹复制到C:\Program Files\Microsoft Visual Studio 9.0\VC\下,选择合并文件夹,也就是将include文件夹下的内容全部复制到C:\Program Files\Microsoft Visual Studio 9.0\VC\include\目录下。(win7 64bit操作系统是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ include\)

C.将D:\DCMTK\dcmtk-3.6.0-win32-i386-support_MD\openssl-1.0.0c\bin下的五个文件复制到C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\下。(win7 64bit操作系统是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ bin\)

2. CMAKE编译

A. 修改DCMTK源码的CMake配置属性,CMake将要把DCMTK源码生成VS2008项目:

打开D:\DCMTK\dcmtk-3.6.0\dcmtk-3.6.0\CMakeLists.txt

1、 将/MT修改成/MD, /MTd修改成/MDd(因为我是Visual Studio 9  2008,所以只修改绿色的地方,为了安全和方便,你可以把CMakeLists.txt里面的/MT、 /MTd都替换成/MD、 /MDd).如下图(点击图片可以看高清图)

2、 修改DCMTK支持库的开关属性。将前面五个支持项(DCMTK_WITH_TIFF、DCMTK_WITH_PNG、DCMTK_WITH_XML、DCMTK_WITH_ZLIB、DCMTK_WITH_OPENSSL)的开关都设置成ON。如下图(点击图片可以看高清图)

修改后

小注:实际上面两步骤本来是在CMake程序界面上直接可以修改的,奈何CMake对DCMTK3.6.0支持的并不是很好,界面改了CMake属性,生成的VS项目实际并没有改,你可以自己查看后面D:\DCMTK\dcmtk-bin里的VS项目dcmDump的项目属性-〉C/C++-〉Code Generation,里面仍然会是MTd,这样就导致后面建立Qt的MDd项目小例子,编译总是出错。于是只好手动修改CMakeLists.txt了,其实并不影响生成VC项目,反而更方便。这是影响我问题的关键,我是在DCMTK官方论坛里看到的解决方法。FAQ #26: Compilation of DCMTK-based program fails w/ LNK2005,请注意最后一段的Note。

B. 打开安装好的CMAKE-gui程序。关闭所有跟VS有关的程序。在where is the source code里,选择你的dcmtk源代码的位置,

我的源代码位置是D:\DCMTK\dcmtk-3.6.0\ dcmtk-3.6.0。在where to build the binaries下选择你想存放build结果的文件夹,我新建

了一个D:\DCMTK\dcmtk-bin 的文件夹。 C. 点击Configure,选择编译环境。我的win7 32bit电脑上装的VS2008,因此我选择的Visual Studio 9 2008,(win7 64bit

也选择这个Visual Studio 9 2008,不用选择VS2008 64bit,否则出错)点击finish。等待configure完成。这中间会出现***not found

的信息,忽略它们。 D. 之后点击Generate。这时候CMake使命也就完成了,可以关闭了。

如下图(点击图片可以看高清图)

3. VS2008编译

这时在D:\DCMTK\dcmtk-bin下会多出来很多文件夹和文件。用VS2008打开其中的sln文件。在一个solution下会有很多个project。

A. 点击Build->Batch Build,选择ALL_BUILD的debug版,点击右边的Build。耐心等待。会有很多个warning,应该是由字符编码不统一引起的。最后会看到76个编译 成功,0个失败。

B. 之后,再选择Build->Batch Build,这次选择INSTALL的debug版本,点击右边的Build。最后会显示1个工程编译成功,这时在你选择的安装目录下(默认是C:\Program Files\DCMTK)就会有lib,bin,include,etc,share文件夹,里面就是之后写程序做医学图像处理所需要的库文件了!如下图(点击图片可以看高清图)

四、测试例子

Cpp代码

  1. #include "testa.h"
  2. #include <QtGui/QApplication>
  3. #include <QDebug>
  4. #include "dcmtk/config/osconfig.h"
  5. #include "dcmtk/dcmdata/dctk.h"
  6. int main(int argc, char *argv[])  
  7. {  
  8. QApplication a(argc, argv);  
  9. TestA w;  
  10. w.show();  
  11. DcmFileFormat fileformat;  
  12. OFCondition oc = fileformat.loadFile("111.dcm");  
  13. if(oc.good()){  
  14. OFString patientName;  
  15. if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())  
  16. {  
  17. qDebug()<<"Patient Name:"<<patientName.data();  
  18. }  
  19. }  
  20. return a.exec();  
  21. }

       1、配置项目属性

A. 新建一个Qt application,把以上源代码复制粘贴进main.cpp去。 B. 右键单击工程名,选择属性(properties),在Configuration Properties->C/C++->General下,

Additional Include Directories里加入上一步编译出来的include文件夹,我的Win7 32bit电脑上是

C:\Program Files\DCMTK\include,这一步是为了让程序能够找到头文件。(Win7 64bit 路径是:

C:\Program Files (x86)\ DCMTK\include)

C. C/C++->code generation里,Runtime Library 选择/MDd,这一步是要和之前CMAKE的编译选项一致。

(我的Qt项目默认就是/MDd) D. Linker->General里,Additional Library Directories里填写上一步编译出来的lib文件夹,我的Win7 32bit

电脑上是C:\Program Files\DCMTK\lib,这一步是为了让程序能够找到之前编译好的lib文件。(Win7 64bit 路径是:

C:\Program Files (x86)\ DCMTK\lib) E. Linker->Input里,在Additional Dependencies 里依次加上

wsock32.lib netapi32.lib ofstd.lib oflog.lib dcmdata.lib zlib.lib

这一步是加入具体我们程序需要的lib文件。网上很多的帖子中,都没有提到oflog.lib这个文件,可能是由于旧的版本中

并没有使用到这个文件。但是对于3.6.0版,这个lib文件是必需的。我们例子中只需要如上几个Lib,如果还需要其他

dcmtk 的lib,请遵守以下引入顺序。

F. Apply ,ok,编译工程,运行,命令行应该输出Patient Name:he ying hou 。

DCMTK3.6.0(MD支持库)安装说明的更多相关文章

  1. DCMTK3.6.1(MD支持库)安装说明

    转载:http://qimo601.iteye.com/blog/1685135 [前言] 最近,因为需要开发DICOM网管模块,必须使用DCMTK的DcmNet模块.但是DCMTK3.6.0在Dcm ...

  2. DCMTK3.6.0 (MT支持库)安装 完整说明

    环境WIN7 + VisualStudio2010 + dcmtk3.6.0 + Cmake2.8.6 准备工作: 从dcmtk官方网站下载源代码及支持库文件.分别名为:dcmtk-3.6.0 dcm ...

  3. VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...

  4. Linux下安装PHP的GD支持库

    Linux下安装PHP的GD支持库   1.安装 zlib  wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/zlib-1.2.3.tar.gz ...

  5. linux中必备常用支持库的安装(CentOS)

    在CentOS安装软件的时候,可能缺少一部分支持库,而报错.这里首先安装系统常用的支持库.那么在安装的时候就会减少很多的错误的出现 yum install -y gcc gdb strace gcc- ...

  6. centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版

    zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...

  7. phpize 扩展GD库 安装 ! 环境--centos 7 +nginx 1.7.11+php 5.6.7

    使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib  freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR       ...

  8. CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend

    http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位         下载地址:http://mirrors.163.co ...

  9. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

随机推荐

  1. linux中的服务

    一.服务分类 独立的服务比如像httpd服务,用户可以直接来访问.并且独立服务常驻内存.而xinetd服务是一个服务管理器,它是常驻内存的,它下面有很多子服务,但这些子服务并不长驻内存.当用户想要使用 ...

  2. 某表含有N个字段超精简模糊查询方法

    我们在做多个字段模糊查询时,是不是觉得非常麻烦?比如我要模糊查询某表多个字段存在某数据时,如下 select * from table where a like '%key%' or b  like ...

  3. new-nav-css

    header:before, header:after ,.navigation:before, .navigation:after,.nav-row:before, .nav-row:after,. ...

  4. python 生成器

    摘自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108 ...

  5. Jquery-获取同级标签prev,prevAll,next,nextAll

    1.next([expr]): 获取指定元素的下一个同级元素(注意是下一个同级元素哦) 参数可有可无,参数设定遵循jquery选择器规则 <!DOCTYPE html> <html& ...

  6. Java设计模式-迭代子模式(Iterator)

    顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对 ...

  7. 【bzoj2463】 谁能赢呢?

    www.lydsy.com/JudgeOnline/problem.php?id=2463 (题目链接) 题意 一个n*n的棋盘,开始时左上角有一个棋子,每次可以把棋子向4个方向移动,但不能移动到曾经 ...

  8. POJ1979 Red and Black

    速刷一道DFS Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...

  9. JSON后端页面解析

    json-lib 请求: http://localhost:8080/MyWeb/pay?cmd=getUrl&param={"OrderId":"sddd111 ...

  10. IOC 构造函数注入vs属性注入

    1.不管是构造函数注入还是属性注入,都要先把对象给new 出来,构造函数应该也是public.2.一般使用 配置文件,属性注入,不用使用特性,直接配置,初始化或依赖,凡是注入的,都要有访问权限,pub ...