`
qimo601
  • 浏览: 3444130 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多

前言:

虽然写了这么一大堆,实际过程很简单,大家耐心看完,绝对能成功。我已经在我的办公电脑和我的影像工作站上,都成功实现了。(简单文字版,请看这篇《DCMTK3.6.0(MD支持库)安装说明-无图版》

DCMTk3.5.4安装类似于下面,但是CMake生成的时候,可以直接界面上修改,因为3.5.4和3.6.0的CMakeLists.txt很多地方已经不一样了,之间的区别可以参考这篇文章《DCMTK3.5.4与3.6.0版本的区别》

柳北风儿

qimo601@126.com

2012-06-07

 

一、运行环境: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文件夹,里面就是之后写程序做医学图像处理所需要的库文件了!如下图(点击图片可以看高清图)


四、测试例子

#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 。

 

附件上有一个DICOM的图像 111.dcm


参考文章:

  • 大小: 12.8 KB
  • 大小: 15 KB
  • 大小: 22.8 KB
  • 大小: 90.9 KB
  • 大小: 49 KB
  • 大小: 49 KB
  • 大小: 81.5 KB
  • 大小: 56.8 KB
  • 大小: 52.7 KB
分享到:
评论
5 楼 qimo601 2014-04-14  
zdb123zdb123 写道
我在编译程序时,在loadfile哪里会出现No such file or directory 这是什么问题


dcm文件没放在debug下吧,写成绝对路径试试
4 楼 zdb123zdb123 2014-04-02  
我在编译程序时,在loadfile哪里会出现No such file or directory 这是什么问题
3 楼 qimo601 2013-05-30  
lvtingyang88 写道
这个我已经安装成功了,可是我在QT里面引用到他里面的头文件和库的时候报
dcmdata.lib(dcuid.obj) : error LNK2019: 无法解析的外部符号 _WSACleanup@0,该符号在函数 "long __cdecl gethostid(void)" (?gethostid@@YAJXZ) 中被引用
这个错误请问如何解决



首先恭喜您编译成功。

你的问题,我估计是在使用lib的方法上有问题。
你参考本文最后的例子,请确认lib文件引入的顺序,以及是否有遗漏。

DCMTK的lib文件顺序大致如下:
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmnet.lib
dcmimage.lib
dcmimgle.lib
zlib.lib

如果载入顺序错了,会有编译错误的。

如果您有最新进展可以通知我,我的最新博客[url= http://blog.163.com/qimo601@126]http://blog.163.com/qimo601@126[/url]
2 楼 qimo601 2012-06-24  
Fanatic357 写道
你好,如果用DCMTK中的dcmprscp来作DICOM的打印服务器可行吗,如何修改配置文件呢?谢谢!
我用命令:
dcmprscp.exe -c dcmpstat.cfg -p IHEFULL
启动了SCP,
用命令:
dcmpsprt.exe -s -c dcmpstat.cfg -p IHEFULL CT.dcm
生成了HG和SP文件,
用命令:
dcmprscu -d -v +d -c dcmpstat.cfg SP_XX.dcm
打印出了一些信息,但是scp端并没有使用默认的打印机打印出来啊,难道说dcmprscp不能作为打印服务器?求指点啊。谢谢了。



兄弟,打印这块,我暂时还没用到。
但是我看到冷老师一篇文章写的非常详细,或许对你有帮助。

你按照他的步骤,应该是可以实现打印的。里面需要配置网络,以及要修改 C:/DICOM/Source/dcmpstat.cfg配置文件的信息。

希望您能成功。最好能总结一下,跟大家共享一下您的实验心得。

冷老师的DCMTK打印文章链接:http://qimo601.iteye.com/blog/1555204
1 楼 Fanatic357 2012-06-22  
你好,如果用DCMTK中的dcmprscp来作DICOM的打印服务器可行吗,如何修改配置文件呢?谢谢!
我用命令:
dcmprscp.exe -c dcmpstat.cfg -p IHEFULL
启动了SCP,
用命令:
dcmpsprt.exe -s -c dcmpstat.cfg -p IHEFULL CT.dcm
生成了HG和SP文件,
用命令:
dcmprscu -d -v +d -c dcmpstat.cfg SP_XX.dcm
打印出了一些信息,但是scp端并没有使用默认的打印机打印出来啊,难道说dcmprscp不能作为打印服务器?求指点啊。谢谢了。

相关推荐

    dicom.rar_dcmtk_dcmtk3.6_dcmtk3.6.0_dicom

    6. **编译与配置**:DCMTK 3.6.0的编译过程涉及设置环境变量、配置选项,以及链接依赖库。开发者需要熟悉CMake等构建工具来完成编译和安装。 7. **安全与隐私**:由于涉及到患者信息,使用DCMTK时必须遵循HIPAA...

    DCMTK3.6.0库在VS2012中的配置实例

    配置DCMTK3.6.0库在VS2012中是一项技术性较强的任务,涉及到CMake的使用、编译选项的设定、环境变量的配置等多个步骤。成功配置后,你可以利用DCMTK的强大功能处理和交换DICOM格式的医学图像数据,从而开发出符合...

    Dcmtk3.6.0

    Dcmtk3.6.0, 如果从头开始理解DICOM的协议,然后完全自己编写这些代码来实现这些协议,是一件工程浩大的事情。德国offis公司开发的DCMTK,为我们提供了实现DICOM协议的一个平台,使得我们可以在它的基础上轻松的完成...

    dcmtk-3.6.0.zip

    DCMTK(DICOM ToolKit)是一个开源软件库,专门用于开发与DICOM(Digital Imaging and Communications in Medicine)标准相兼容的应用程序和组件。DICOM是医疗领域广泛使用的标准,用于存储、传输和处理医学影像数据...

    dcmtk-3.6.0编译完成的动态库文件(包含Release和Debug两个版本)

    在描述中提到的"dcmtk-3.6.0版本编译出的动态库文件,包含Debug和Release版本",意味着你将获得一套完整的DCMTK库,无论是在开发阶段还是最终发布的产品中,都能找到对应版本的库文件进行链接。 压缩包内的文件名称...

    DCMTK3.6.0 CHM帮助文档

    做了一个DCMTK 3.6.0版本的CHM帮助文件,拿上来共享一下;有些粗糙,大家不要介意。

    dcmtk-3.6.0-win32-i386-support_MD 支持库

    这个“dcmtk-3.6.0-win32-i386-support_MD”版本是针对Windows 32位平台的DCMTK支持库,包含了MD(Medical Device)相关的支持。 DICOM是医疗领域广泛采用的数据交换、存储和通信的标准,它定义了如何在不同设备...

    linux系统下的 DCMTK-3.6.0

    总结,DCMTK-3.6.0在Linux系统下为开发者提供了强大的DICOM支持,无论是开发医疗图像处理应用,还是构建医疗信息系统,都能从中受益。通过理解和利用其核心组件、构建过程以及提供的各种资源,用户能够高效地实现...

    DCMTK3.6.2+VS2015(MD支持版)编译和安装示范

    DCMTK3.6.2+VS2015(MD支持版)编译和安装示范,本文的编译机器是Windows10 64位系统,使用VS2015和cmake3.7.2编译DCMTK源码为64位包(运行时库为MD或MDd)。

    dcmtk-3.6.0官方帮助文档

    这个3.6.0版本的官方帮助文档是开发者和使用者理解DCMTK的重要资源,提供了详尽的函数、类和方法的说明。 DCMTK的核心功能包括: 1. **DICOM网络协议实现**:DCMTK提供了实现DICOM网络协议的工具,如dcmnet库,允许...

    windows32位下的dcmtk-3.6.0

    包括dcmtk-3.6.0、dcmtk-3.6.0-win32-i386-support_MD和dcmtk-3.6.0-html-help(英文版),同时,附带cmake-3.2.2-win32-x86。 在win7旗舰版32位+VS2005下亲测编译通过,没有问题。

    dcmtk-3.6.0帮助文档chm版

    dcmtk-3.6.0帮助文档chm版

    dcmtk-3.6.1编译出来的Release版本的动态库文件

    DCMTK 3.6.1是该工具包的一个稳定版本,包含了用于创建、读取、修改和传输DICOM数据的库和实用程序。 在描述中提到的"Release版本的动态库文件",意味着这些库文件已经过优化,适用于生产环境。与Debug版本相比,...

    DCMTK工具下载,实现dicom传输文件等功能

    DCMTK提供了一系列的库和命令行工具,帮助开发者实现DICOM的解析、创建、编辑以及传输等功能。 DCMTK的核心组件包括: 1. **dcmdata**: 这个库负责处理DICOM数据元素,解析和生成DICOM数据流。 2. **dcmsr**: 用于...

    dcmtk-3.6.1_0924编译之后的包

    总的来说,这个"dcmtk-3.6.1_0924编译之后的包"是一个方便开发者使用的资源,提供了完整的DCMTK库和相关工具,以便于在项目中集成 DICOM 支持,进行医学图像处理和通信。使用这个包,开发者可以避免从源代码编译的...

    dcmtk编译安装详细文档

    从官方或者第三方镜像站点下载DCMTK的源码包,例如`dcmtk3.6.0.tar.gz`。解压后进入源码目录,创建一个名为`dcmtk-bin`的文件夹,这将是编译生成的二进制文件的存放位置。 ```bash tar -zxvf dcmtk3.6.0.tar.gz cd ...

    DCMTK入门指南-编译说明

    1. 将支持库中的相应 lib 文件、include 文件、bin 文件拷贝到 VS2010 安装目录的相应文件夹下。 2. 打开 CMAKE,选择源代码的位置和编译结果的存放位置。 3. 选择编译环境为 Visual Studio 2010。 4. 勾选所需的...

    DCMTK3.6.2 MD VS2015

    DCMTK3.6.2是该库的一个特定版本,它支持多种功能,如 DICOM 数据的读取、写入、转换、网络传输等。 在项目开发中,有时我们需要对库进行编译以适应特定的开发环境,例如本例中的Microsoft Visual Studio 2015 (VS...

    Windows Qt环境下DCMTK库

    在Windows 32位系统上,你需要安装Qt 5.10版本,确保它是32位的,因为你要编译的是32位的DCMTK库。同时,还需要安装一个C/C++编译器,如Microsoft Visual Studio或MinGW,以完成编译过程。 4. **编译DCMTK** - ...

Global site tag (gtag.js) - Google Analytics