【转帖】使用/MD选项 编译dcmtk 3.5.4
从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打开并编译。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/okaimee/archive/2010/03/19/5396253.aspx
“七”乐无穷,尽在新浪新版博客,快来体验啊~~~请点击进入~