C/C++教程

DCMTK在windows下的编译与安装(CMAKE+Visual Studio 2017)

本文主要是介绍DCMTK在windows下的编译与安装(CMAKE+Visual Studio 2017),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近项目中有需求需要对DICOM影像进行处理, 因此需要使用到开源库DCMTK。编译与安装遇到了一些坑这里总结以下。

一,准备工作

1.DCMTK源码 

https://dicom.offis.de/dcmtk.php.en

下载后解压到D:\DCMTK\dcmtk-3.6.6目录下

2.DCMTK文档

网上上看了许多blog关于编译的说法众说纷纭,最后还是参考了官方的文档中的INSTALL相关说明

下载后解压到D:\DCMTK\dcmtk-3.6.6-html-help

3.DCMTK支持运行库

编译x64的选带Win64的,编译x86的选win32的。

这里编译的是x64的项目因此选择红色的  dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8.zip

另外带icu的版本好像是支持unicode相关,这里没有用到。

下载后解压到 D:DCMTK\dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8

4. 关于MD和MT

MD的意思是使用表示动态连接msvcrt.dll (debug版连接msvcrtd.dll)这样构建的静态库较小也不需要在多个项目中重复连接入libmcrt.lib

MT表示静态连接C++运行库,会导致编译后的库文件体积较大。但是不需要目标系统安装VC++运行库。现在基本上运行环境都会有安装VC++ runtime,因此选择MD版本能够更加节省资源。

 

5. 下载CMAKE  https://cmake.org/

(CMAKE是一个跨平台的配置编译依赖的工具。它能生成每个平台下不同的编译配置文件。比如Windows上的.sln,  Linux下的Makefile,MacOSX下的xcode等) 

选择最新的Windows x64版本下载安装即可

6.建立build目录和install目录

CMAKE配置过程会生成build目录(用于生成.sln的目录)以及install目录(编译后会生成include, lib等提供给其他程序编译使用)

这里分别建立 D:\DCMTK\dcmtk-3.6.6-build 以及 D:\DCMTK\dcmtk-3.6.6-install 两个目录

最后整个目录结构图如下所示:

7. 添加DCMTK的其他组件。

由于项目中需要用到DCMTKJP2K组件(需要另行付费购买)

将dcmtkjp2k的源文件放入“D:\DCMTK\dcmtk-3.6.6”目录中

修改“D:\DCMTK\dcmtk-3.6.6”中的CMakeList.txt  并在其中找到“# Modules to be built”在后面添加“dcmtkjp2k”

修改后的CMakelist.txt文件如下:

 

此时准备工作完成。

 

二,配置CMAKE

 

1. 打开CMAKE(Cmake-gui)

首先配置源代码(DCMTK的源代码)路径和BUILD路径(后续用Visual Studio构建编译lib的路径):

2. 接着选择configure 选择合适的编译器以及要生成的版本

这里用的是VS2017 以及生成的是x64.

接着CMAKE会开始扫描本机的编译环境并进行相关的配置。这一步大概要花费十来分钟。

 

3. 配置DCMTK依赖库的文件

配置完后会有许多错误,这里先选择分组

 

然后配置WITH中的项目 :

这里需要配置

WITH_LIBCONVINC  (字符串编码转换相关的库)

D:\DCMTK\dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8\libiconv-1.16

WITH_LIBPNGINC   (支持PNG的编解码)

D:/DCMTK/dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8/libpng-1.6.37

WITH_LIBTIFFINC    (支持TIFF的编解码)

D:/DCMTK/dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8/libtiff-4.2.0

WITH_LIBXMLINC    (支持LibXML)

D:/DCMTK/dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8/libxml2-iconv-2.9.10

WITH_OPENJPECINC   (支持JPEG的编解码)

D:/DCMTK/dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8/openjpeg-2.4.0

WITH_OPENSSLINC     (支持OPENSSL相关的加解密,网络传输等)

D:\DCMTK\dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8\openssl-1.1.1i

WITH_SNDFILEINC  (不设置)

WITH_ZLIBINC   (支持Zlib库进行解压缩等)

D:/DCMTK/dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8/zlib-1.2.11

配置好以后的如图所示:

注意:这里的配置的目录要求所有配置的目录中都应该是这样的结构 这里以libiconv为例

其中include存放了相关的头文件,lib文件夹中应包含:

*_d.lib debug库连接用的静态库

*_o.lib release库连接用的静态库

如果要自行编译这些库一定要最后按照这样的格式来存放。否则后续编译连接会报大量的错误。

 

4. 配置DCMTK编译时的组件:

这里就把刚才配置依赖的几个都打勾即可。

DCMTK_OVERWRITE_WIN32_COMPILER 如果要编译MD版本的库这个选限一定要取消否则后面用VS编译连接的适合会报连接错误

DCMTK自带的Limits模板在编译某些模块(如某些版本的DCMJP2K)会有冲突,因此使用C++ STL自带的numeric_limits模板

启用DCMTK_ENABLE_STL_LIMITS ON

 

5.配置CMAKE编译选项

配置编译后DCMTK的安装目录 CMAKE_INSTALL_PREFIX

D:\DCMTK\dcmtk-3.6.6-install

把这里所有带MT  MTd的编译选限全部改成MD  MDd

修改后如下

 

6.配置BUILD选项(可选)

如果后续要生成动态库就选择 

可以选择仅生成一个动态库:

笔者这里生成的是静态库就不选了

7.全部配置完后再点一次configure

这次就十几秒

8.点选Generate将在前面配置的build目录下生成VS的.sln工程文件

这里可能会有一些警告信息,暂时忽略吧

 

三,编译与安装

选择Open Project会启动Visual Studio打开刚才生成的.sln文件

这里先编译DEBUG版本为例:

选择Build->Batch Build

然后选择第一个ALL_BUILD  DEBUG x64

开始构建工程,整个过程大概要20分钟。

最后终于编译成功 103成功,0错误

接着选择Build->Batch Build然后选择构建Install

此时会将编译好的lib和配置好的include文件放入前面设置的安装目录

 

用同样的方法可以编译Release版的DCMTK静态库并Install

四,连接与使用DCMTK库

DCMTK库的依赖关系:

dcmdata :==>: ofstd
dcmimage :==>: dcmimgle, dcmdata, ofstd
dcmimgle :==>: dcmdata, ofstd
dcmjpeg :==>: ijg8, ijg12, ijg16, dcmimage, dcmimgle, dcmdata, ofstd
dcmnet :==>: dcmdata, ofstd
dcmpstat :==>: dcmimage, dcmimgle, dcmsign, dcmsr, imagectn, dcmtls, dcmnet, dcmdata, ofstd
dcmsign :==>: dcmdata, ofstd
dcmsr :==>: dcmdata, ofstd
dcmtls :==>: dcmnet, dcmdata, ofstd
dcmwlm :==>: dcmnet, dcmdata, ofstd
imagectn/dcmqrdb :==>: dcmnet, dcmdata, ofstd

 

引用官网

The DCMTK is functionally structured into so-called modules. For each module there is a directory in DCMTK's main directory.

These are the modules of the public DCMTK toolkit (version 3.6.0):

  • config: Module for configuring compilation of DCMTK
  • ofstd: General purpose library including string class, etc.
  • oflog: A logging library based on log4cplus
  • dcmdata: Module for reading, modifying and writing DICOM data structures
  • dcmimgle: Module for processing DICOM images (grayscale)
  • dcmimage: Module for processing DICOM images (color)
  • dcmnet: Module for the DICOM network protocol
  • dcmqrdb: Module providing a simple test PACS
  • dcmsr: Module implementing DICOM Structured Reporting (SR)
  • dcmwlm: Module implementing a DICOM worklist server
  • dcmjpeg: Module implementing a DICOM JPEG codec
  • dcmjpls: Module implementing a DICOM JPEG-LS codec
  • dcmpstat: Module implementing DICOM Presentation States
  • dcmsign: Module implementing DICOM signatures etc.
  • dcmtls: Module implementing secure networking for DICOM
  • docs: Module containing some general documents about DCMTK
  • doxygen: Module for generating API documentation with doxygen

Documentation on the DCMTK is available online.

Dependencies

This image illustrates the dependencies between the public modules (as of DCMTK 3.6.4):

 

这篇关于DCMTK在windows下的编译与安装(CMAKE+Visual Studio 2017)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!