DCMTK的编译
DCMTK 是一个开放程序代码的 DICOM Toolkit,它提供读取 DICOM 影像及进行传输通讯的函数库,是目前最广为应用的处理DICOM影像的工具包。
DCMTK提供的一系列的源码,要使用该工具包则需要对其进行编译,得到我们需要的库文件.lib,然后再和头文件一起加入到我们的工程中进行使用。
在程序中使用编译的函数库,主要是要把.h和.lib文件加入到工程中。对于源码来说.h文件都相同,而.lib文件一般来说会有debug版本和release版本,不同的版本只是在对源码进行编译时,选择的编译模式不同,因此以debug版本为例说明在VS 2005下DCMTK的编译方法。
1准备工作
首先是要下载编译的源文件和工具。DCMTK下载地址为:http://www.dcmtk.org/dcmtk.php.en;DCMTK最新版本为3.5.5,我们下载的版本为3.5.4即下载文件dcmtk-3.5.4.zip;其次下载支持工具包,支持工具包有两种格式,MT和MD版本,我们下载默认版本MT版本,文件名:dcmtk-3.5.4-win32-i386-support.zip。最后下载编译工具Cmake,下载地址为:http://www.cmake.org/cmake/resources/software.html;下载版本为2.8.1的文件即:cmake-2.8.1win32-x86.zip;我使用的是2.6.0版本的。
在任意盘,如C盘,新建文件夹DCMTK,将下载文件均放到该文件夹并解压到当前文件夹;然后新建三个文件夹分别叫bin、lib和surport。把支持库的文件夹都移到surport中,而bin和lib用来放编译结果。如图1所示:
图1准备文件夹
2 向VS2005安装目录中添加支持库文件
在surport文件夹中搜所include,将搜索结果如图2所示。
图2 搜索结果
将搜索到的所有文件全部复制到vs2005的VC目录中,如我的路径为D:/Program Files/Microsoft Visual Studio 8/VC;在弹出的“文件替换确认”对话框中选择全部,最后将xinclude.移到D:/Program Files/Microsoft Visual Studio 8/VC/include中。
同样搜索*_d.lib文件,将其添加到D:/Program Files/Microsoft Visual Studio 8/VC/lib文件夹中,文件名中去掉_d(若编译release版本,则搜索*_o.lib文件,复制到D:/Program Files/Microsoft Visual Studio 8/VC/lib文件夹,再去除_o)。
最后接着搜索bin ,将搜索结果放到D:/Program Files/Microsoft Visual Studio 8/VC/bin。
此过程将DCMTK的支持库文件的debug版本转换VS 2005的内在库。
3 CMAKE工具的使用
1)更改编译标志:打开C:/DCMTK/cmake-2.6.0-win32-x86/bin中的cmake-gui.exe程序,设定编译的源代码路径和输出路径,在此都选择C:/DCMTK/dcmtk-3.5;勾选“show advance entries”,然后将编译的开关设置为MT,默认的为MD,结果如图3所示。
图3更改编译标志
注:MT、MD是决定库文件的引用方法,在VS2005的MFC程序中,项目->属性—>配置属性->常规中,“MFC的使用”项中选择“共享的DLL中使用MFC”时才选择MD,其他两种情况选择MT。在使用Cmake是一定要保证:C:/DCMTK/dcmtk-3.5.4文件夹中的CMakeLists.txt中,CMAKE程序的编译开关,VS 2005中项目程序中的MT、MD标志一致。
2)勾选全部支持库,并且找到EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH分别设为C:/DCMTK/bin和C:/DCMTK/lib,这样最后编译出来的.lib文件和exe文件就在这两个文件夹中,如图4所示。
图4勾选支持库和设置输出目录
3)点击Configure,选择当前编译器。然后点击Genarate,生成DCMTK的项目文件。此时会出现红色警告。让你在某个目录下的Cmakelist.txt文件中的 ADD_EXECUTABLE(${PROGRAM} ${PROGRAM})行前添加:
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
这是由于DCMTK3.5.4是对Cmake2.4版本的使用,使用高于2.6.0的Cmake进行编译金辉出现此警告,在其弹出的指定文件夹中的cmakelist文件中相应的位置,添加要求添加的语句即可。
4 VS 2005中进行编译
1) 编译ALL_BUILD:进入 C:/DCMTK/dcmtk-3.5.4 目录,双击 dcmtk.sln文件,在打开的项目中, 从主选单中选 "生成" - "批生成",在弹出的对话盒中勾选 "ALL_BUILD" 的 DEBUG方案,并按下 "生成"。编译结果为62个成功,0个失败。
2)编译 INSTALL:主选单中选 "生成" - "批生成",在弹出的对话盒中勾选 " INSTALL " 的DEBUG方案,并按下 "生成",结果显示错误:
CMake Error at dcmnet/apps/cmake_install.cmake:31 (FILE):
file INSTALL cannot find "//dcmtkeay.dll".
这是因为编译器找不到dcmtkeay.dll文件,用记事本打开 C:/DCMTK/dcmtk-3.5.4/dcmnet/apps/cmake_install.cmake 文件,为dcmtkeay.dll,指定绝对路径:
把 "/dcmtkeay.dll" 改成"D:/Program Files/Microsoft Visual Studio 8/VC/bin/dcmtkeay.dll"
把 "dcmtkssl.dll" 改成 "D:/Program Files/Microsoft Visual Studio 8/VC/bin/dcmtkssl.dll";
然后按上述步骤再重新编译,结果应该是63个成功。此时在bin和lib文件夹中就可以看到编译生成的exe文件和lib文件。
5 VS 2005中使用DCMTK
主要介绍DEBUG版本的DCMTK库在VS 2005中的应用。DCMTK的支持库已经加入VS 2005的内置库中,现在只需要添加DCMTK的库即可。
1)头文件飞安放:如同支持库文件的添加方法一样,在C:/DCMTK/dcmtk-3.5.4中搜索Include然后将搜索结果放入到VS 2005中VC目录下Include中。
2)库文件的安放:新建一个MFC工程,再将C:/DCMTK/lib文件夹中放大.lib文件放入工程文件夹中,然后在stdafx.h中添加如下代码:
#pragma comment(lib,"netapi32.lib")
#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"ofstd.lib")
#pragma comment(lib,"dcmdata.lib")
#pragma comment(lib,"dcmimgle.lib")
#pragma comment(lib,"dcmimage.lib")
#pragma comment(lib,"ijg8.lib")
#pragma comment(lib,"ijg12.lib")
#pragma comment(lib,"ijg16.lib")
#pragma comment(lib,"dcmjpeg.lib")
#pragma comment(lib,"dcmnet.lib")
#pragma comment(lib,"dcmdsig.lib")
#pragma comment(lib,"dcmsr.lib")
#pragma comment(lib,"dcmtls.lib")
#pragma comment(lib,"dcmpstat.lib")
#pragma comment(lib,"dcmwlm.lib")
#pragma comment(lib,"dcmqrdb.lib")
#pragma comment(lib,"dcmtkeay.lib")
#pragma comment(lib,"dcmtkssl.lib")
#pragma comment(lib,"iconv.lib")
#pragma comment(lib,"libtiff.lib")
#pragma comment(lib,"libpng.lib")
#pragma comment(lib,"libxml2.lib")
#pragma comment(lib,"zlib.lib")
这样就可以在工程中使用DCMTK了,如果要改为release版本,则需要将DCMTK的支持库、库文件的.lib文件更换掉。