转载自嗯哇创作https://blog.csdn.net/chaoenhu/article/details/78200274
Visual Studio 2015+cmake编译安装MD版的DCMTK
本文的编译机器是Windows10 64位系统,使用VS2015和cmake3.7.2编译DCMTK源码为64位包(运行时库为MD或MDd)。
注(引用): /MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的"Invalid Address specified to RtlValidateHeap"问题。另外托管C++和CLI中不再支持/MT和/MTd选项。
/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。
直接下载链接或下载最新版http://www.dcmtk.org/dcmtk.php.en
直接下载链接或下载最新版http://www.dcmtk.org/dcmtk.php.en
直接下载,并解压,进入bin文件夹,点击cmake-gui.exe.
官网:https://cmake.org/download/
图中具体参数如下:
MD/MDd设置(重要)(防止产生错误三)
set "DCMTK_OVERWRITE _WIN32_COMPILER_FLAGS" to "OFF"
Xml support:
"DCMTK_WITH_XML" "ON"
"WITH_LIBXMLINC" 解压的支持库中xml的位置/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libxml2-2.9.4
libpng support:
set "DCMTK_WITH_PNG" to "ON" and set "WITH_LIBPNGINC"
我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libpng-1.6.30
libtiff support:
set "DCMTK_WITH_TIFF" to "ON" and set "WITH_LIBTIFFINC"
我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libtiff-4.0.8
OpenSSL support:
set "DCMTK_WITH_OPENSSL" to "ON" and set "WITH_OPENSSLINC"
E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/openssl-1.1.0f
zlib support:
set "DCMTK_WITH_ZLIB" to "ON" and set "WITH_ZLIBINC"
我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/zlib-1.2.11
libiconv support:
set "DCMTK_WITH_ICONV" to "ON" and set "WITH_LIBICONVINC"
我的E:/workspace/DCMTK20171009/dcmtk-3.6.2-win64-support_MD-msvc-14.0/libiconv-1.15
else
DCMTK_ENBABLE_CHARSET_CONVERSION
其他的支持库都关闭比如ICU。
------ 已启动生成: 项目: INSTALL, 配置: Debug x64 ------
-- Install configuration: "Debug"
CMake Error at cmake_install.cmake:31 (file):
file cannot create directory: C:/Program Files/DCMTK/include/dcmtk/config.
Maybe need administrative privileges.
导致各种错误,如warning LNK4098: 默认库"MSVCRT"与其他库的使用冲突;使用 /NODEFAULTLIB:library
如:LNK2001 无法解析的外部符号 __imp_*
解决方案:运行时与支持库运行时匹配
-
#include"dcmtk/config/osconfig.h"
-
-
#include"dcmtk/dcmdata/dctk.h"
-
-
#include
-
-
-
-
usingnamespace
std;
-
-
int main()
-
-
{
-
-
DcmFileFormat fileformat;
-
-
OFCondition oc = fileformat.loadFile(
"111.dcm");
-
-
if (oc.good()) {
-
-
OFString patientName;
-
-
if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
-
-
{
-
-
cout <<
"Patient Name:"<< patientName.data()<<
endl;
-
-
}
-
-
}
-
-
-
-
system(
"pause");
-
-
-
-
return
0;
-
-
}
结果:
按顺序添加依赖项Iphlpapi.lib;ws2_32.lib;wsock32.lib;netapi32.lib;ofstd.lib;oflog.lib;dcmdata.lib;zlib_d.lib。
Iphlpapi.lib;ws2_32.lib;wsock32.lib;netapi32.lib;为系统库文件
ofstd.lib;oflog.lib;dcmdata.lib;为DCMTK生成的库文件
zlib_d.lib 支持包里的库文件,把它移动到DCMTK生成的库文件的位置
测试数据(111.dcm)用下面链接下载
http://www.casmi.science/index.php/s/mAn8XKYRd04FVIH
本文档仅用于交流学习,编写于2017年10月10日星期二18:06,转载请引用,有问题发邮件到[email protected]!
本文的PDF版下载 http://download.csdn.net/download/chaoenhu/10015394