日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建

發布時間:2024/9/27 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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源碼包和支持庫包
  • 打開CMake 選擇源代碼路徑和將要生成的代碼路徑
  • 點擊左下角Configure,在彈出對話框中選擇對應的MS版本后Finish確認?
  • 點完可能要跑很久,第一次要check很多東西,在跑完以后列表里應該是這樣一片紅。?
  • 上圖中的黃色方框內,就是我們剛才下載的支持庫要設置的地方了。CMake沒有自動識別到路徑,我們需要手動設置一下。?
    下載的支持庫目錄結構如下:?
  • 將這些支持庫路徑全部設置完成之后,應該如下圖所示(每個人支持庫存放路徑有所不同,圖中路徑僅供參考,實際以自己的為準):?
  • 在配置中,將配置過路徑的這些項目全部勾選,并將DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS取消勾選(很關鍵)。?
  • 此時再次點擊Configure,短暫的讀條之后,列表應該全都變成白色,檢查先前做過的改動是否依然保留,如果路徑和勾選項依然保留,說明設置已經成功,點擊Generate就可以生成工程文件了。?
  • 至此,CMake上的工作就全部結束了,可以關閉CMake進行后續操作。
  • 打開得到的DCMTK工程文件進行批生成

  • (非常重要)由于CMake生成的工程配置文件中引用了錯誤的文件名,必須對產生的工程文件進行修改:打開DCMTK工程目錄,打開并修改./dcmnet/apps/cmake_install.cmake文件,全文搜索openssl。便會發現此段引用了兩個不存在的文件名dcmtkeay.dll和dcmtkssl.dll,將其分別修改成先前下載的支持庫中?
    ./openssl-1.1.0f/bin/dcmtkcrypto_d-1_1-x64.dll和?
    ./openssl-1.1.0f/bin/dcmtkssl_d-1_1-x64.dll?
    即可(Release版本選擇沒有_d后綴的文件進行修改),修改后保存關閉。
  • 使用管理員權限用Visual Studio打開得到的DCMTK工程解決方案(DCMTK.sln)
  • 菜單欄選擇生成(B)–>批生成(T)…
  • 在彈出對話框中勾選Debug配置的ALL_BUILD項目(若要生成Release版本的文件,此處和后續步驟都選擇Release配置即可),點擊生成。?

    事實證明,這一步會跑非常久(圖轉網侵刪)?
  • 當你得到類似如下提示,說明這一步已經完成了?
  • 重復第3步,但是多勾選一個Debug配置下的INSTALL項目(Release環境選Release),然后點生成。?
  • 如果沒有報錯,那恭喜,DCMTK 3.6.2已經編譯成功了,

  • 編寫示例程序進行測試

    工程設置

    新建一個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开发环境的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。