编译DCMTK

本文档详细介绍了如何编译DCMTK库,包括MFC支持、语言配置、DLL生成、iostream使用以及跨平台编译的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译DCMTK
2008年09月11日 星期四 09:31
也许是DCMTK的开发人员认为DCMTK是一个专用的库,没有必要做成动态链接库。
   也许是DCMTK的开发人员认为DCMTK需要跨平台,做成动态链接库就平台相关了,违背了跨平台的本意。
    所以,如此两个也许只有,DCMTK经过编译之后总是得不到DLL文件。DCMTK到底能不能编译成DLL来使用呢?反正我是失败了。你来试试。不过在编译DCMTK的过程中也解决了不少棘手问题。不感独享。

    我用的编译环境是VC8(就是VS2005)里面的VC。我们编译的目的是使DCMTK能和我们现在使用的MFC协作良好。我们学习都是螺旋渐进式学习的(提出结论,然后推翻结论,得出新结论),我们也这样。

结论一:
    使用VC编写程序,总是离不开字符串,需要使用字符串CString。而VC呢?又支持各种不同的字符串编码。那么CMake创建的DCMTK项目,里面默认的什么字符串编码呢?好象VC8向导创建的项目,默认就是Unicode,而不是MBCS哦。正好相反,需要注意。CMake创建的DCMTK项目里面都使用的MBCS字符集。那么以后使用VC编写DCMTK应用程序的时候,还是使用MBCS字符集吧。毕竟DCMTK太大了,修改起来不太方便。以后,我们就不讨论Unicode版本的应用程序啦,只考虑使用MBCS的应用程序。

结论二:
    DCMTK只能编译成静态连接库。
    为什么呢?因为我们按照默认的办法编译DCMTK之后,找不到任何DLL哦。全部是一大堆的LI

### 使用 MinGW 编译 DCMTK 的方法 为了成功使用 MinGW 编译 DCMTK,可以按照以下方式配置环境并完成编译过程。以下是详细的说明: #### 1. 准备工作 确保安装了必要的工具链和依赖项: - **MinGW**:下载并安装适合操作系统的版本[^2]。 - **CMake**:用于生成构建文件,建议使用最新稳定版。 #### 2. 下载源码 从官方 GitHub 镜像获取最新的 DCMTK 源代码[^1]: ```bash git clone https://github.com/DCMTK/dcmtk.git cd dcmtk ``` #### 3. 创建构建目录 为了避免污染源代码目录,在根目录下创建一个新的构建目录: ```bash mkdir build_mingw && cd build_mingw ``` #### 4. 配置 CMake 参数 运行 `cmake` 命令时指定 MinGW 工具链以及所需的选项。例如: ```bash cmake .. \ -G "MinGW Makefiles" \ -DDCMTK_BUILD_APPLICATIONS=OFF \ -DBUILD_SHARED_LIBS=ON \ -DDCMTK_ENABLE_STL_STRING=ON \ -DDCMTK_WITH_PNG=ON \ -DCMAKE_C_COMPILER="path/to/mingw/bin/gcc.exe" \ -DCMAKE_CXX_COMPILER="path/to/mingw/bin/g++.exe" ``` 上述命令中的参数解释如下: - `-G "MinGW Makefiles"`:告诉 CMake 使用 MinGW 构建系统。 - `-BUILDSHARED_LIBS=ON`:启用共享库支持[^3]。 - `-DCMAKE_C_COMPILER` 和 `-DCMAKE_CXX_COMPILER`:显式设置 GCC/G++ 路径。 #### 5. 执行编译 一旦 CMake 成功生成构建脚本,执行以下命令启动编译流程: ```bash mingw32-make ``` 如果一切正常,最终会在 `build_mingw/lib` 中找到生成的 `.dll` 文件(动态链接库),而在 `build_mingw/bin` 中则会发现可执行程序。 #### 6. 测试与验证 通过简单的测试案例确认编译后的功能是否正确无误。比如尝试加载 DICOM 图像或解析元数据来检验核心模块的工作状态。 --- ### 提供一段示例代码片段展示如何调用已编译好的库函数读取DICOM标签值 假设已经完成了以上步骤,则下面是一个基本的例子演示如何利用该库提取患者姓名的信息: ```cpp #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmdata/dctk.h" int main(int argc, char *argv[]) { if (argc != 2) { std::cerr << "Usage: dcmdump <filename>" << std::endl; return 1; } OFString patientName; DcmFileFormat fileformat; if (fileformat.loadFile(argv[1]).good()) { // 加载DICOM文件 if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()){ cout<<"Patient's Name is:"<<patientName<<endl; }else{ cerr<<"Could not find Patient's name."<<endl; } } else { cerr << "Error: cannot read file " << argv[1] << endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值