DCMTK3.6.0(MD支持库)安装说明
一、运行环境: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-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代码
- #include "testa.h"
- #include <QtGui/QApplication>
- #include <QDebug>
- #include "dcmtk/config/osconfig.h"
- #include "dcmtk/dcmdata/dctk.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- TestA w;
- w.show();
- DcmFileFormat fileformat;
- OFCondition oc = fileformat.loadFile("111.dcm");
- if(oc.good()){
- OFString patientName;
- if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
- {
- qDebug()<<"Patient Name:"<<patientName.data();
- }
- }
- return a.exec();
- }
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支持库)安装说明的更多相关文章
- DCMTK3.6.1(MD支持库)安装说明
转载:http://qimo601.iteye.com/blog/1685135 [前言] 最近,因为需要开发DICOM网管模块,必须使用DCMTK的DcmNet模块.但是DCMTK3.6.0在Dcm ...
- DCMTK3.6.0 (MT支持库)安装 完整说明
环境WIN7 + VisualStudio2010 + dcmtk3.6.0 + Cmake2.8.6 准备工作: 从dcmtk官方网站下载源代码及支持库文件.分别名为:dcmtk-3.6.0 dcm ...
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...
- Linux下安装PHP的GD支持库
Linux下安装PHP的GD支持库 1.安装 zlib wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/zlib-1.2.3.tar.gz ...
- linux中必备常用支持库的安装(CentOS)
在CentOS安装软件的时候,可能缺少一部分支持库,而报错.这里首先安装系统常用的支持库.那么在安装的时候就会减少很多的错误的出现 yum install -y gcc gdb strace gcc- ...
- centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版
zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...
- phpize 扩展GD库 安装 ! 环境--centos 7 +nginx 1.7.11+php 5.6.7
使用phpize编译GD库安装,先安装前置库libjpeg libpng zlib freetype等 都是下面php编译的几个选项 先看php编译的选项: --with-gd=DIR ...
- CentOS 6.0最小化编译安装Nginx+MySQL+PHP+Zend
http://www.osyunwei.com/archives/235.html 引言: 操作系统:CentOS 6.0 32位 下载地址:http://mirrors.163.co ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
随机推荐
- NoSQL数据库之国产开源产品:SequoiaDB 分析前言
随着互联网技术的发展,面对海量数据的存储和分析,传统关系型数据库已经无法满足,由此衍生出一种与关系型数据库区别开的数据库NoSQL(Not Only SQL). 国外做的比较成熟的NoSQL有Mong ...
- AJAX(二)AJAX框架
上文(AJAX(一)AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们 ...
- 一篇让Java程序猿随时可以翻看的Oracle总结
来源:http://www.cnblogs.com/bzx888/p/4820712.html 有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢. 这 ...
- 【kAriOJ】离散数学春季学期编程测试 1
A.凯撒密码 题意: 给你k1,k2,和一串明文,一串密文. 明文用k1加密,密文用k2解密. 对于明文要把字母转换成大写字母,非字母全部删除. 额:要考虑到取模可能会变成负数,所以要加一下26再取模 ...
- ethtool使用记录
网卡出现很诡异的问题,把电脑连到一些交换机上是工作的,连到另外一些就不行...交换机上的link灯还时不时的闪一下,看起来像是在尝试连接. 用dmesg查看,看到下面的信息: [ 1112.92211 ...
- 由chrome剪贴板问题研究到了js模拟鼠标键盘事件
写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.cli ...
- CodeForces 701B Cells Not Under Attack
题目链接:http://codeforces.com/problemset/problem/701/B 题目大意: 输入一个数n,m, 生成n*n的矩阵,用户输入m个点的位置,该点会影响该行和该列,每 ...
- Unity自动打包Apk
unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了.这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当 ...
- JS 内部传参
- Jquery 表单操作
文本框,文本区域: 获取值: 1.$("#txt").attr("value"); 2. $("txt").val(); 单选按钮: 获取值 ...