从dcmtk 官网http://dicom.offis.de/dcmtk.php.en 下载:
1. dcmtk 源码 dcmtk-3.5.4.tar.gz
2. 预编译的支持包 dcmtk-3.5.4-win32-i386-md-support.zip , 注意该包使用的是 "Multithreaded DLL" 选项 (/MD and /MDd)
3. 创建目录 如E:/dcmtk,将以上两个包拷贝其中,将两个包解压到当前文件夹
4. 修改E:/dcmtk/dimtk-3.5.4/CmakeLists.txt, 将其中的所有/MT,/MTd 分别改为/MD,/MDd.
5. 使用cmake 2.6 生成工程文件。参照 E:/dcmtk/dcmtk-3.5.4/INSTALL 文件中的描述设置cmake参数
这里,支持库中我没有选择openssl 和libxml,主要是因为他们是可选的,同时支持包中的lib并非由/MD生成的, 见 支持包中的OFFIS_README.txt。
在cmake的高级设置中设定输出的库文件,不然输出的库文件是分散的,不方便
找到 "LIBARY_OUTPUT_PATH" , 设置为 E:/dcmtk/dcmtk-3.5.4/lib/
找到 "EXECUTABLE_OUTPUT_PATH" ,设置为 E:/dcmtk/dcmtk-3.5.4/bin/
6. 集中dcmtk的头文件,dcmtk代码结构层次太多,头文件分散在很多子目录中。 为便于引用,搜索出所有E:/dcmtk/dcmtk-3.5.4/ 下的.h文件,将他们拷贝到一个目录下,如E:/dcmtk/include,
7. 这样E:/dcmtk/include,E:/dcmtk/dcmtk-3.5.4/lib/, E:/dcmtk/dcmtk-3.5.4/bin/ (也许不需要),就包括了基于dcmtk开发的所有所需头文件和库文件了。
如果dcmtk 为vs2005编译,在vs2010中使用将有c runtime 冲突,具体情况进解决方法如下:
问题:dcmtk库不能使用,连接时报出很多error link 2001,如:unresolved external symbol "__declspec(dllimport) struct std::_Smanip<int> __cdecl std::setw(int)" (__imp_?setw@std@@YA?AU?$_Smanip@H@1@H@Z)之类的错误
原因: zillion中所使用的dcmtk库是由源代码从VS2005创建的,而且使用的/MDd选项,因此它们是动态连接vs2005自带的C runtime 。但是发现在vs2010beta中C runtime 与vs2005中有了很大不同。 如std::setw()在vs2005 c runtime 中签名为:unresolved external symbol "__declspec(dllimport) struct std::_Smanip<int> __cdecl std::setw(int)" (__imp_?setw@std@@YA?AU?$_Smanip@H@1@H@Z) , 而在在vs2010beta中是__declspec(dllimport) struct std::_Smanip<__int64> __cdecl std::setj(__int64)" (__imp_?setj@std@@YA?AU?$_Smanip@_J@1@_J@Z),因此在vs2010中执行连接时会有一些C Runtime函数找不到。
解决方法:升级dcmtk库:由于vs2010还为发布,cmake还不能支持vs2010,所以dcmtk源码不能直接创建vs2010工程。解决方法是直接 利用cmake创建dcmtk的vs2005 工程,用vs2010打开并编译。