DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建
DCMTK 3.6.2(MD支持庫)與Microsoft Visual Studio 2017開發環境的搭建
?
- DCMTK 362MD支持庫與Microsoft Visual Studio 2017開發環境的搭建
- 寫在前面
- 知識準備
- DCMTK
- MT or MD
- 下載軟件
- DCMTK源代碼以及相應版本的MD支持庫
- CMake
- 正式開工
- 使用CMake生成DCMTK工程文件
- 打開得到的DCMTK工程文件進行批生成
- 編寫示例程序進行測試
- 工程設置
- 示例代碼
?
寫在前面
最近的課堂作業接觸到了關于醫學圖像格式Dicom的一些開發,在經過將近一個學期硬著頭皮上的學習后,最終,在這里記錄一些過程中遇到的問題。
由于在學習過程中,互聯網上找到的資料多是關于DCMTK 3.6.0的安裝準備,大都有一些過時,且有效信息分布得比較散亂,所以這篇文章先簡單記錄一下DCMTK 3.6.2開發環境的搭建,以備日后不時之需。
知識準備
DCMTK
DCMTK是由德國offis公司提供的開源項目,利用C++實現,經過十多年的開發和維護,已經基本實現了Dicom協議的所有內容,且提供了所有源代碼、支持庫和幫助文檔,自然就成了本次課程項目的不二之選。
MT or MD?
作者柳北風兒在一篇關于DCMTK 3.6.0編譯的博文中提到
MD/MT的知識儲備:
/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在非必要時最好也不要采用了。
下載軟件
DCMTK源代碼以及相應版本的MD支持庫
DCMTK3.6.2的源代碼和已經編譯完成的可執行文件都可以在其官網上直接下載。?
需要注意的是在下載MD支持庫時,要正確選擇對應的操作系統版本以及Visual Studio版本,在這里我們選擇下載:?
dcmtk-3.6.2-win64-support_MD-msvc-15.0.zip?
Pre-compiled libraries for Visual Studio 2017 (MSVC 15.0), 64 bit, with “MD” option
CMake
對DCMTK源代碼的生成需要用到Cmake。CMake版本的選擇可能沒有那么多講究,本次直接選擇了可以下載到的最新穩定版本3.10.0,但理論上更新的版本也可行。?
還是要多嘴說一句,CMake的源碼在本項目中沒有用,下載時請選擇Binary Distributions進行下載,同樣也要選擇對應操作系統的版本下載。
正式開工
使用CMake生成DCMTK工程文件
下載的支持庫目錄結構如下:?
打開得到的DCMTK工程文件進行批生成
./openssl-1.1.0f/bin/dcmtkcrypto_d-1_1-x64.dll和?
./openssl-1.1.0f/bin/dcmtkssl_d-1_1-x64.dll?
即可(Release版本選擇沒有_d后綴的文件進行修改),修改后保存關閉。
事實證明,這一步會跑非常久(圖轉網侵刪)?
編寫示例程序進行測試
工程設置
新建一個VC++空項目,設置工程解決方案配置為debug,解決方案平臺為x64 ,添加源文件main.cpp。
進入菜單欄項目(P)–>YOUR_PROJECT_NAME_屬性(注意修改的都是debug下的x64的配置,如果換成release要重新設置成release方案下的配置)。
左側C/C++–>常規,右側附加包含目錄,設置為?
C:\Program Files\DCMTK\include(默認位置)。
左側鏈接器–>常規,右側附加庫目錄,設置為?
C:\Program Files\DCMTK\lib?
你下載并解壓的支持庫目錄\zlib-1.2.11\lib
左側鏈接器–>輸入,右側附加依賴項,設置為?
Iphlpapi.lib?
ws2_32.lib?
wsock32.lib?
netapi32.lib?
ofstd.lib?
oflog.lib?
dcmdata.lib?
dcmdsig.lib?
dcmnet.lib?
dcmsr.lib?
dcmimgle.lib?
dcmqrdb.lib?
dcmtls.lib?
dcmwlm.lib?
dcmpstat.lib?
dcmjpls.lib?
dcmjpeg.lib?
dcmimage.lib?
charls.lib?
ijg8.lib?
ijg12.lib?
ijg16.lib?
i2d.lib?
zlib_d.lib(Release版本刪除_d)?
附一張lib依賴關系圖,之后遇到具體問題不用全數添加,選擇需要的以及其依賴即可?
示例代碼
//filename: main.cpp #include "dcmtk\config\osconfig.h" #include "dcmtk\dcmdata\dctk.h" #include <iostream>void main() {DcmFileFormat *myFileFormat = new DcmFileFormat;OFCondition cond = myFileFormat->loadFile("c:/111.dcm");if (cond.good()){OFString patientName;if (myFileFormat->getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()) std::cout << "Patient Name: " << patientName << "\nTest successed.\n";else std::cout << "No Patient Name Data!\n";}else std::cout << "Error occurs when opening file, check path or filename.\n";system("pause"); }最后附上測試用到的dicom格式圖片。提取密碼: cw3q
如果能夠正確顯示Patient Name參數,那么恭喜,DCMTK庫已經完全正確地安裝好了,可以進行下一步的開發工作了!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt使用dmctk时的错误
- 下一篇: CT基本概念(必须掌握)