md4c语言_【转帖】使用/MD选项 编译dcmtk 3.5.4

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 __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 __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打开并编译。

“七”乐无穷,尽在新浪新版博客,快来体验啊~~~请点击进入~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值