您的位置:首页 > 编程语言 > C语言/C++

DCMTK in VS2015

2017-07-05 12:39 253 查看
 本文主要介绍VS中如何配置和使用DCMTK库,也会提及qt,没有详细介绍VS和cmake等工具的安装,因为这都不会的话,也没必要再学了。本人用的电脑是x86_64,编译只讲32位的,64位同理。

 DCMTK是一个功能强大针对医学图像处理、通讯的开源库,主要面向C++语言。本人最近在做一个项目,项目需求是跨平台、C++编程,所以就选用了DCMTK库作为工具,由于编程基础薄弱,在该库的配置过程中遇到很多障碍,这里把其中的经验总结下来,供需要的人参考。大神绕路,不喜也勿喷。

1 VS2015的安装

 下载VS2015,我之前用的是社区版,后来用的企业版,对DCMTK库都没问题,这里是下载网站,请自行安装。如果要在VS中建立QT项目的话需要安装QT下载地址,及QTPackage下载地址.

2 下载DCMTK库

 下载DCMTK3.6.1版本源代码并解压,下载地址下载地址

3 安装cmake并编译DCMTK库

 下载cmake3.8.0并安装,下载地址,打开cmake gui,如图所示:



在1中输入解压的位置,2中为自己新建的文件夹;

点击configure(耗时比较久,第一次使用时候会弹出选择工具,选择VS 14 2015即可),然后出现如图所示红色状态;

在CMAKE_INSTALL_PREFIX中修改安装位置(建议不在C盘,因为在C盘的话有时候需要管理员权限,比较麻烦);

在CMAKE_CXX_FLAGS_…中修改库类型,MD-动态链接库releae版本,MDd动态链接库debug版本,MT静态链接库release版本,MTd静态链接库debug版本,这里暂不做修改;(默认动态链接库,由于我的项目用了qt做界面,而直接安装的qt默认是动态库,为了匹配,我就没做修改)

如果后面想安装release版本的话,注意把CMAKE_OVERWRITE_WIN32_COMPILER的选中取消(在stack overflow看到的,亲测有效);

点击generate生成项目,然后点击open即可打开VS2015并导入项目

4 使用VS2015构建并安装DCMTK库

 上一步只是对DCMTK库编译了下,并没有安装,如图所示,在VS2015菜单栏中点击 生成->批生成,选中ALL_BUILD Debug Win32然后点击生成,完了选中INSTALL中的对应选项,点击生成,生成完毕没报错(warning不用管)就可以用了,如果有报错,重复前面步骤检查错误。

如果成功的话在cmake gui界面CMAKE_INSTALL_PREFIX设置的目录下会有include、lib、bin等目录,大小几百M,release版本和debug大小不同;



5 建立VS项目测试

 建立一个空C++项目,然后设置相关项,注意debug模式和release模式,两个的设置方法一样,但用哪个设置哪个,两个都用就都设置(前提是你的两种DCMTK库你都成功安装了):

右键项目->属性->C/C++->代码生成->运行库MDd (因为默认的debug模式,我们就先按照这个来)

右键项目->属性->C/C++->附加包含目录,加入前面库的安装目录下的include目录,我的是,D:\DCMTK\MDd\include

右键项目->属性->链接器>附加库目录,加入前面库的安装目录下的lib目录,D:\DCMTK\MDd\lib

右键项目->属性->链接器>依赖项,加入以下内容:

kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
dcmdata.lib
oflog.lib
ofstd.lib
ws2_32.lib
netapi32.lib
wsock32.lib
dcmimgle.lib
dcmimage.lib
dcmrt.lib


 输入代码测试,在主文件中写如下代码:

#include<iostream>
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
using namespace std;
int main()
{
DcmFileFormat fileformat;
OFFilename="test.dcm";//这里改为你的dcm文件
OFCondition status = fileformat.loadFile(OFFilename);
DcmDataset *dataset = fileformat.getDataset();
OFString PatientName;
dataset->findAndGetOFString(DCM_PatientName, PatientName);
cout<<PatientName;
system("pause");
return 0;
}


 如果这里运行没问题的话,说明库安装成功(当然也可能存在小瑕疵,但整体没错,即便有问题,多折腾几次就好了,我都折腾了十七八回了,人生苦短,贵在折腾啊);

折腾时候可能遇到的问题:

1 一大堆的link错误,一般是链接器中lib文件的顺序或者缺少某lib文件,或者库根本没编译好;

2 **log错误,就是traclog或者什么,错误文件名中含log,找到该文件,把报错的几行给注释掉即可;

3 MTd与MDd什么不符的,就是用的库类型和设置的库类型不符,看文章最后库类型的介绍,一定要一致才能用;

6 QT中测试

 你可能疑惑,bb了这么久,说好的qt呢,其实库编译好qt就是能用的,在qt下建立个项目,贴上上面代码,在pro文件里添加如下代码:

DCMTK=$$quote("D:/DCMTK/MDd")
DCMTK_INCLUDE=$$DCMTK"\include"
INCLUDEPATH +=  $$DCMTK_INCLUDE
LIBS+= -L$$quote("D:/DCMTK/MDd/lib/")
LIBS += -lkernel32 \
-luser32 \
-lgdi32 \
-lwinspool \
-lshell32 \
-lole32 \
-loleaut32 \
-luuid \
-lcomdlg32 \
-ladvapi32 \
-ldcmdata \
-loflog \
-lofstd \
-lws2_32 \
-lnetapi32 \
-lwsock32 \
-ldcmimgle \
-ldcmimage \
-ldcmrt


 看看是不是可以用了呢,如果不行,继续慢慢折腾吧!

注意事项

1 这里再重新介绍下动态链接库和静态链接库:

MD动态链接库release版本
MT静态链接库release版本
MDd动态链接库debug版本
MTd静态链接库debug版本


动态链接库:顾名思义动态地调用库链接,程序编译生成的exe文件比较小,执行的时候调用所用到的库,如果换个环境这个exe文件就执行不了了,也就是我们常见的程序缺少…,或者直接内存什么鬼的出问题直接挂掉。有点是改动库的话程序不用重新编译,exe文件比较小,缺点是移植到别的电脑的话需要把所依赖的库一起整理打包。

静态链接库:与动态链接库相对,编译时候编译器把库中用到的的函数编译一起到可执行程序,程序移植方便,但是文件较大,如果修改需要重新编译。

2 Linux下使用

 Linux下库的编译也用cmake,操作方法跟Windows下相同。如果你在Windows下折腾熟了,Linux下也是一样的,在这里我也懒得多说了,在linux下qt中的配置跟Windows下qt的配置类似,去掉几个windows下特有的lib即可,我自己试过,没啥问题,这里贴个我在linux下的pro文件的配置;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt visual studio DCMTK C++