环境:IDE:vc6.0 OS:xp
一、库编译、安装
a、wx库的编译、安装可以参考上一篇中所写。就没有问题的。
b、dcmtk库的编译、安装
1、首先当然是要下载库源文件了,这些在官方网站上都可以下,下载源文件和支持库即可。解压后,就会发现有个CMakelist.txt文件,一看就知道要用cmake生成工程文件了。所以,这所有的前提是你下载了cmake,并且会用cmake
因为wx的run_time library要在Debug Multithreaded dll下运行,所以先将CMakelist文件中的MTd和MT全都换成MDd和MD。
2、打开cmake设置好源路径和安装路径,点击configure,这时,就会出现一些选项,设置好这些选项,像库的安装路径,是否需要支持库,需要的话就要找到这些库的路径。都设置完后,再点击config,点击ok,这时有个警告,这个警告时cmake版本问题,应该是问题不大的。
3、cmake完成后,在设置的安装路径下面,就可以看到dcmtk的工程文件,用vc6打开,将run_time library设置为Debug Multithreaded dll,编译,这时如果出现LINK2005错误,与下面类似:
Linking...
MSVCRTD.LIB(MSVCRTD.dll) : error LNK2005: __errno already defined in LIBCMTD.LIB(dosmap.obj)
MSVCRTD.LIB(MSVCRTD.dll) : error LNK2005: _free already defined in LIBCMTD.LIB(dbgheap.obj)
MSVCRTD.LIB(MSVCRTD.dll) : error LNK2005: _realloc already defined in LIBCMTD.LIB(dbgheap.obj)
MSVCRTD.LIB(MSVCRTD.dll) : error LNK2005: _malloc already defined in LIBCMTD.LIB(dbgheap.obj)
MSVCRTD.LIB(MSVCRTD.dll) : error LNK2005: _memmove already defined in LIBCMTD.LIB(memmove.obj)
4、解决办法:a、可以在link-》input中将上面的库设置为忽略库,即:MSVCRTD.LIB。b、按着这种顺序MSVCRTD.LIB LIBCMTD.LIB添加这两种库。c、上面两种方法结合,先按顺序添加,再忽略。这样就可以解决LNK2005的错误。
5、编写实际例子,这写例子前,先说下,程序写完后,编译,可能会出现两个库的宏定义冲突了。警告时没有关系的,主要是有一个错误:ssize_t两次定义的类型不同,这个问题的解决方法是,只需要将其中一个库的源文件中的ssize_t的定义注释掉就可以了。这里只给出两个主要类的代码:
类DcmReader
#include "DcmReader.h"
#include "myDcm.h"
#include "dcmtk/dcmimgle/dcmimage.h"
#include "dcmtk/dcmdata/dcfilefo.h"
#include "dcmtk/dcmdata/dcdeftag.h"
#define DE