VS2017+cmake+DCMTK编译安装

2023-10-30

转载自嗯哇创作https://blog.csdn.net/chaoenhu/article/details/78200274

Visual Studio 2015+cmake编译安装MD版的DCMTK



一、编译环境

本文的编译机器是Windows10 64位系统,使用VS2015和cmake3.7.2编译DCMTK源码为64位包(运行时库为MD或MDd)。

注(引用): /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在非必要时最好也不要采用了。

二、下载文件

1)DCMTK包dcmtk-3.6.2.tar.gz下载

直接下载链接或下载最新版http://www.dcmtk.org/dcmtk.php.en

2)支持库包dcmtk-3.6.2-win64-support_MD-msvc-14.0.zip下载

直接下载链接或下载最新版http://www.dcmtk.org/dcmtk.php.en

3)Cmake3.10 下载

直接下载,并解压,进入bin文件夹,点击cmake-gui.exe.

官网:https://cmake.org/download/


三、用cmake构建VS2015工程

  • 点击cmake-gui.exe打开cmake界面,关闭所有跟VS有关的程序。
  • where is the source code:,选择dcmtk源代码的文件夹,即DCMTK3.6.2包解压路径:E:/workspace/DCMTK20171009/dcmtk-3.6.2
  • where to build the binaries:,选择你想存放build结果的文件夹(新建的空文件夹),E:/workspace/DCMTK20171009/dcmtk-msvc15,勾选Grouped和Advanced


  • 点击Configure,选择编译环境Visual Studio 14 2015 Win64,点击Finish,等待进度完成。

  • 进度条完成后,修改参数,本文的如下图:

图中具体参数如下:

MD/MDd设置(重要)(防止产生错误三)

    set "DCMTK_OVERWRITE _WIN32_COMPILER_FLAGS" to "OFF"

Xml support:

"DCMTK_WITH_XML" "ON"

"WITH_LIBXMLINC" 解压的支持库中xml的位置/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libxml2-2.9.4

libpng support:

set "DCMTK_WITH_PNG" to "ON" and set "WITH_LIBPNGINC"

我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libpng-1.6.30

libtiff support:

set "DCMTK_WITH_TIFF" to "ON" and set "WITH_LIBTIFFINC"

我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libtiff-4.0.8

OpenSSL support:

set "DCMTK_WITH_OPENSSL" to "ON" and set "WITH_OPENSSLINC"

E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/openssl-1.1.0f

zlib support:

set "DCMTK_WITH_ZLIB" to "ON" and set "WITH_ZLIBINC"

我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/zlib-1.2.11

libiconv support:

set "DCMTK_WITH_ICONV" to "ON" and set "WITH_LIBICONVINC"

我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libiconv-1.15

else

DCMTK_ENBABLE_CHARSET_CONVERSION <disable>

其他的支持库都关闭比如ICU。
  • 修改参数完成后,点击"configure", 进度完成,点击Generate,完成后就在dcmtk-msvc15文件夹下生产了VS工程文件,可以点击Open Project 打开。


四、编译和安装

  1. 打开某个(如dcm2pnm)项目的属性页(右击属性),查看字符集(属性->配置属性->常规)是否为使用多字节字符集,和运行库(属性->配置属性->C/C++->代码生成)是否为MDd(Debug下)或MD(release下),如果是证明生成项目成功。

  • 编译:生成->批生成->选中您需要配置方式的ALL_BUILD项目,点击右边的生成,下图是生成Debug版的,最后生成: 成功 95 个。

 

  • 安装:生成->批生成->选中您需要配置方式的INSTALL项目,点击右边的生成,下图是安装Debug版的,默认安装在C:/ProgramFiles/DCMTK/,修改到其他盘,请参考错误一的解决方案二

五、错误集锦

错误一:生成INSTALL项目时,出现以下错误

------ 已启动生成: 项目: INSTALL, 配置: Debug x64 ------

-- Install configuration: "Debug"

CMake Error at cmake_install.cmake:31 (file):

file cannot create directory: C:/Program Files/DCMTK/include/dcmtk/config.

Maybe need administrative privileges.

解决方案:

  1. 以管理员方式启动VS2015,重新生成。
  2. 修改解决方案路径下的cmake_install.cmake文件(用文本方式打开,我用的是NotePad++),把安装路径C:/Program Files/DCMTK/修改到D盘如下图,清理解决方案重新生成


错误二:生成INSTALL项目时,出现以下错误

解决方案:

  1. 把文件夹dcmtk-3.6.2-win64-support_MD-msvc-14.0\openssl-1.1.0f\bin下的dll复制到安装目录D:/Program Files/DCMTK/bin下。

  2. 修改解决方案路径下的文件夹dcmnet/apps中的cmake_install.cmake文件,把dcmtkeay.dll修改为"dcmtkcrypto_d-1_1-x64.dll",dcmtkssl.dll修改为" dcmtkssl_d-1_1-x64.dll"如下图

错误三运行时库(MT MD)冲突

导致各种错误,如warning LNK4098: 默认库"MSVCRT"与其他库的使用冲突;使用 /NODEFAULTLIB:library

如:LNK2001 无法解析的外部符号 __imp_*

解决方案:运行时与支持库运行时匹配

 六、测试例子

测试代码


 
 
  1. #include"dcmtk/config/osconfig.h"
  2. #include"dcmtk/dcmdata/dctk.h"
  3. #include<iostream>
  4. usingnamespace std;
  5. int main()
  6. {
  7. DcmFileFormat fileformat;
  8. OFCondition oc = fileformat.loadFile( "111.dcm");
  9. if (oc.good()) {
  10. OFString patientName;
  11. if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
  12. {
  13. cout << "Patient Name:"<< patientName.data()<< endl;
  14. }
  15. }
  16. system( "pause");
  17. return 0;
  18. }


结果:

配置环境

 

按顺序添加依赖项Iphlpapi.lib;ws2_32.lib;wsock32.lib;netapi32.lib;ofstd.lib;oflog.lib;dcmdata.lib;zlib_d.lib。

Iphlpapi.lib;ws2_32.lib;wsock32.lib;netapi32.lib;为系统库文件

ofstd.lib;oflog.lib;dcmdata.lib;为DCMTK生成的库文件

zlib_d.lib 支持包里的库文件,把它移动到DCMTK生成的库文件的位置

 

测试数据

测试数据(111.dcm)用下面链接下载

http://www.casmi.science/index.php/s/mAn8XKYRd04FVIH

 说明

本文档仅用于交流学习,编写于2017年10月10日星期二18:06,转载请引用,有问题发邮件到mitk@fingerpass.net.cn!  

本文的PDF版下载  http://download.csdn.net/download/chaoenhu/10015394

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS2017+cmake+DCMTK编译安装 的相关文章

  • FA萤火虫算法求解二元四峰函数的简单例子(python代码)

    这个代码是应付智能优化的课的 代码有些地方有些重复啰嗦 请大家担待 可视化都是自己搞得 好多for循环打印 有些地方完全可以构造函数 大家有需要可以自己改一下 import random import numpy as np import
  • python--支持向量机应用小例

    以下内容笔记出自 跟着迪哥学python数据分析与机器学习实战 外加个人整理添加 仅供个人复习使用 SVM的分类效果 软间隔的作用 复杂算法容易造成过拟合 如何解决 核函数的作用 核函数的作用 可以实现非线性分类 import numpy
  • SpringBoot整合vue-admin-template实现登录

    vue admin template简介 前后端分离开发模式越来越受开发人员的喜爱 开源项目vue admin template 是一个后台前端解决方案 它基于 vue 和 element ui实现 更多详情请阅读vue template
  • java打印模板_怎样做一个word模板,用java调用打印功能

    1 首先新建一个空白文档 并另存为 Normal dotm Word2007及以后版本 Normal dot Word2003 2007版本 2 进行需要的模板设置 对字体 段落 页眉页脚 页面边距等进行设置 3 对字体 段落的设置 在空白
  • JSON格式化异常:JsonMappingException

    使用RestTemplate请求post json接口报错 Caused by org codehaus jackson map JsonMappingException Can not instantiate value of type
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 打包文件和目录 2 解包归档文件 3 压缩归档文件 4 列出归档文件内容 5 排除特定文件 6 保留文件权限和所有权 7 保留时间戳 8 增量备份 9 使用文件列表 10 压缩级别控制 总结
  • html iframe post,iframe实现跨域post请求的技术细节

    在最近的一个项目中 我打算在页面上实现这样一个功能 在网页上画出某种图形 上传到服务器后 返回一个src地址 这个地址可以用来分享到各种社交媒体 这个功能看似非常简单 但要实现它还需要注意各种小的细节 首先说下思路和技术要点 用canvas
  • vue下载所有格式的文件

    vue下载所有格式的文件 vue下载所有格式的文件需要先安装downloadjs插件 downloadjs官网 https github com rndme download 下载插件 npm install downloadjs vue引

随机推荐

  • STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

    目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号 STM32F103C8T6 在日常生活中 很多情况下会需要使用时间 单片机中虽然也是有定时器但并不能较为准备的实现计时功能 而且
  • SpringBoot + Poi-tl操作word,快速生成报表

    前段时间做了一个需求 需要快速生成一份数据报告 里面包含了文字 图片和数据报表 同时生成的图形数据也可以随意修改 之前想着使用Apache POI来进行实现 在翻阅一些资料后 发现poi tl更适合我们的业务 也更容易上手 于是对其进行了研
  • 什么是实例分割,与语义分割和目标检测有何不同?

    在计算机视觉领域 图像分割是一项重要任务 旨在将图像分割成具有语义或实例级别的不同区域 实例分割 语义分割和目标检测是图像分割中的三个关键概念 本文将介绍这些概念 并详细讨论它们之间的区别和特点 什么是目标检测 1 目标检测 目标检测是一种
  • docker容器CPU共享比例——通过--cpu-shares选项设置容器按比例共享CPU资源(弹性)

    多容器任务运行时 很难计算CPU的使用率 命令中的 cpu shares选项值不能保证可以获得1个vcpu或者多少GHz的CPU资源 仅仅只是一个弹性的加权值 root 10 docker run name con1 itd cpu sha
  • 爬取B站前两千位up主的粉丝数

    看到B站有很多分析up主粉丝量的视频 自己也来试着实现一下 第一步先进到一位up主的个人空间 这里以uid是1和2的bishi为例 https space bilibili com 1 用户名 bishi https space bilib
  • 记录:电脑弹出U盘显示设备正在使用中(已解决)

    问题描述 弹出U盘时提示 该设备正在使用中 请关闭可能使用该设备的所有程序或窗口 然后重试 方法一 确认能看到的打开的程序 窗口 文件等关闭 方法二 剪切板中没有移动硬盘里的文件 可以复制粘贴一下电脑硬盘的文件 方法三 查看占用的进程 ID
  • js 删除对象里的某个属性

    删除属性有很多方法 学到了就在这里记录一下 有一个对象 a 有2个属性 b 1 c 2 删除b 保留 c 1 使用delete let a b 1 c 2 delete a b true console log a c 2 2 使用解构 l
  • windows C++ 获取CPU ID

    网上找到了相关代码 但是其中用了嵌入式汇编 只能在win32位下编译运行 根据其他网络资料进行了修改 可以在x64下编译运行 原版资料见链接 链接 link 修改后的代码为 include stdafx h include GetCPUId
  • 【转载】数据库操作系统——Visual FoxPro 6.0安装步骤

    转载地址 https blog csdn net panrenlong article details 82289978 utm medium distribute pc relevant none task blog BlogCommen
  • 如何在DAYU200上安装浏览器-基于OpenHarmony 3.1 Release版本

    1 前言 终于 OpenHarmony有自己的浏览器应用了 可以查看视频演示 先看下效果 打开某宝 可以扫码登录 2 安装教程 2 1 DAYU200升级最新的 3 1Release版本固件 升级教程 https www bilibili
  • Dva系列:connect与@connect的使用(一)

    前言 在刚开始使用Dva的时候 写好models 通过connect进行仓库与组件的链接的时候怎么不是很理解 翻译官方文档也没有明确的解释 提示 以下是本篇文章正文内容 下面案例可供参考 一 connect的用来干什么 connect用来链
  • (微服务多模块)Springboot+Security+Redis+JWT 仅需一招

    小编在开发阶段发现 在现在众多文章中的教程里 虽然有许许多多的Springboot Security Redis JWT 但是那些教程基本的运行环境都在单个项目单个模块中进行开发和测试的 这使得小编在实际的开发过程中 不能Ctrl C an
  • ionic工程报错->Current working directory is not a Cordova-based project的解决

    构建ionic工程出错 奇怪了哎 代码没有动啊 于是重新拉取一份代码 构建发现可以的 于是用比较工具查看 原来是误删了工程目录下的www文件夹导致不能识别 把它恢复就好啦
  • windows下安装gmp库+Dev c++

    需要的三个安装文件 1 Dev c 安装文件 链接 https pan baidu com s 18us8SEEh82zzMvtAeJDedA pwd 1zgo 提取码 1zgo 2 gmp库文件 链接 https pan baidu co
  • 通配符的匹配很全面, 但无法找到元素 'aop:aspectj-autoproxy' 的声明

    因为项目需要 想使用spring的注解方法的AOP切面编程 在xml配置文件中加入
  • 图片自动填充单元格_教你两个word技巧,快速填充文本,插入表格不变形

    许多人说 Word没有什么用 只是一个打字工具 因此长期以来 Word是最被忽视的办公软件之一 觉得自己没必要学习这个软件 从而放弃了学习 但事实却并非如此 在Word看似 简单 的外表下 隐藏着海量的功能和技巧 但很多人其实只会了Word
  • SJTU括号栈配对(OJ599)

    题目源自SJTU OJ 1599 模拟一个括号栈 其元素是三种括号 给出长为n的操作序列 按序列要求完成以下几种操作 push pop 栈空则忽略此操作 输出栈顶元素 栈空则忽略此操作 询问当前括号是否匹配 栈空则认为匹配 Input Fo
  • python爬虫利器:user agent switcher

    一 推荐理由 方便 相比于在浏览器中右键检查 再将浏览器设置成手机端 如下图 user agent switcher给我们带来更多的是方便 一次设置好 就不怕每次麻烦的右键检查 设置成手机端的重复性操作了 这对于python爬虫算是一个比较
  • Keil uVision5开发环境搭建(MDK 5)

    1 下载并安装 MDK作为STM32常用的IDE 其他还有IAR等等 在学习STM32F103的过程中 我之所以选择MDK 是因为KEIL5可以完美兼容KEIL4 与之前的版本相比 最大的区别在于器件 Software Packs 与编译器
  • VS2017+cmake+DCMTK编译安装

    转载自嗯哇创作https blog csdn net chaoenhu article details 78200274 Visual Studio 2015 cmake编译安装MD版的DCMTK 一 编译环境 本文的编译机器是Window