ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-04-18 15:03:43  阅读:874  来源: 互联网

标签:MD CMAKE windows dcmtk DCMTK Module 3.6 编译 Visual


最近项目中有需求需要对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):

 

标签:MD,CMAKE,windows,dcmtk,DCMTK,Module,3.6,编译,Visual
来源: https://blog.csdn.net/sesiria/article/details/115818749

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有