(轉載)DCMTK3.6.0(MD支持庫)安裝說…

前言:

雖然寫了這麼一大堆,實際過程很簡單,大家耐心看完,絕對能成功。我已經在我的辦公電腦和我的影像工作站上,都成功實現了。(簡單文字版,請看這篇《DCMTK3.6.0(MD支持庫)安裝說明-無圖版》

DCMTk3.5.4安裝類似於下面,但是CMake生成的時候,可以直接界面上修改,因爲3.5.4和3.6.0的CMakeLists.txt很多地方已經不一樣了,之間的區別可以參考這篇文章《DCMTK3.5.4與3.6.0版本的區別》

柳北風兒

[email protected]

2012-06-07

 

一、運行環境:WIN7 32bit + VisualStudio2008 + dcmtk3.6.0 + Cmake2.8.8

或者 WIN7 64bit

二、準備工作

1)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在非必要時最好也不要採用了。

2)下載軟件:


dcmtk-3.6.0 .zip; 

dcmtk-3.6.0-win32-i386-support_MD.zip(注意,要下載***support_MD的壓縮文件,而不要下載上面單獨列出來的支持庫)。我選擇的MD,因爲我的軟件項目都是基於MD的運行時庫。(您也可以選擇dcmtk-3.6.0-win32-i386-support_MT.zip,如果您的項目是基於MT。通過項目屬性的C/C++->code generation 可以更改運行時庫)將這些壓縮文件解壓縮到硬盤上一個單獨的文件夾裏,我的解壓縮目錄是D:\DCMTK\。

③從cmake官方網站下載cmake的安裝文件,我下載的是cmake-2.8.8-win32-x86.exe。將其安裝到計算機任意目錄下。

        ④dcmtk-3.6.0-html-help.zip,dcmtk html版本幫助文檔,CHM版本暫時還未出。

 

三、安裝過程

1. 將支持庫中的相應lib文件,include文件,bin文件拷貝到VS2008安裝目錄的相應文件夾下。
A.在解壓得到的支持庫的文件夾下搜索_d.lib文件(xxx_d.lib爲DEBUG版本的支持庫,xxx_o.lib爲RELEASE版本支持庫),應該會得到7個結果,將這些文件複製到一個單獨的文件夾下,並把它們的名字中的_d去掉,例如將zlib_d.lib重命名爲zlib.lib。將重命名後的文件拷貝至VS2008安裝目錄下的lib文件夾下,在我的win7 32bit電腦上是C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\。(win7 64bit操作系統是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 
B. 在解壓得到的支持庫的文件夾下搜索include,應該得到5個文件夾,將這些文件夾複製到C:\Program Files\Microsoft Visual Studio 9.0\VC\下,選擇合併文件夾,也就是將include文件夾下的內容全部複製到C:\Program Files\Microsoft Visual Studio 9.0\VC\include\目錄下。(win7 64bit操作系統是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ include\)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 
C.將D:\DCMTK\dcmtk-3.6.0-win32-i386-support_MD\openssl-1.0.0c\bin下的五個文件複製到C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\下。(win7 64bit操作系統是C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ bin\)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
  
2. CMAKE編譯
A. 修改DCMTK源碼的CMake配置屬性,CMake將要把DCMTK源碼生成VS2008項目:
打開D:\DCMTK\dcmtk-3.6.0\dcmtk-3.6.0\CMakeLists.txt
1、 將/MT修改成/MD, /MTd修改成/MDd(因爲我是Visual Studio 9  2008,所以只修改綠色的地方,爲了安全和方便,你可以把CMakeLists.txt裏面的/MT、 /MTd都替換成/MD、 /MDd).如下圖(點擊圖片可以看高清圖)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 

2、 修改DCMTK支持庫的開關屬性。將前面五個支持項(DCMTK_WITH_TIFF、DCMTK_WITH_PNG、DCMTK_WITH_XML、DCMTK_WITH_ZLIB、DCMTK_WITH_OPENSSL)的開關都設置成ON。如下圖(點擊圖片可以看高清圖)

DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 

小注:實際上面兩步驟本來是在CMake程序界面上直接可以修改的,奈何CMake對DCMTK3.6.0支持的並不是很好,界面改了CMake屬性,生成的VS項目實際並沒有改,你可以自己查看後面D:\DCMTK\dcmtk-bin裏的VS項目dcmDump的項目屬性-〉C/C++-〉Code Generation,裏面仍然會是MTd,這樣就導致後面建立Qt的MDd項目小例子,編譯總是出錯。於是只好手動修改CMakeLists.txt了,其實並不影響生成VC項目,反而更方便。這是影響我問題的關鍵,我是在DCMTK官方論壇裏看到的解決方法。 FAQ #26: Compilation of DCMTK-based program fails w/ LNK2005,請注意最後一段的Note。

B. 打開安裝好的CMAKE-gui程序。關閉所有跟VS有關的程序。在where is the source code裏,選擇你的dcmtk源代碼的位置,
我的源代碼位置是D:\DCMTK\dcmtk-3.6.0\ dcmtk-3.6.0。在where to build the binaries下選擇你想存放build結果的文件夾,我新建
了一個D:\DCMTK\dcmtk-bin 的文件夾。  
C. 點擊Configure,選擇編譯環境。我的win7 32bit電腦上裝的VS2008,因此我選擇的Visual Studio 9 2008,(win7 64bit
也選擇這個Visual Studio 9 2008,不用選擇VS2008 64bit,否則出錯)點擊finish。等待configure完成。這中間會出現***not found
的信息,忽略它們。  
D. 之後點擊Generate。這時候CMake使命也就完成了,可以關閉了。 如下圖(點擊圖片可以看高清圖)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
  

3. VS2008編譯
         這時在D:\DCMTK\dcmtk-bin下會多出來很多文件夾和文件。用VS2008打開其中的sln文件。在一個solution下會有很多個project。
A. 點擊Build->Batch Build,選擇ALL_BUILD的debug版,點擊右邊的Build。耐心等待。會有很多個warning,應該是由字符編碼不統一引起的。最後會看到76個編譯 成功,0個失敗。
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 

B. 之後,再選擇Build->Batch Build,這次選擇INSTALL的debug版本,點擊右邊的Build。最後會顯示1個工程編譯成功,這時在你選擇的安裝目錄下(默認是C:\Program Files\DCMTK)就會有lib,bin,include,etc,share文件夾,裏面就是之後寫程序做醫學圖像處理所需要的庫文件了!如下圖(點擊圖片可以看高清圖)
DCMTK3.6.0(MD支持庫)安裝說明 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 


四、測試例子

Cpp代碼 #include #include "dcmtk/config/osconfig.h" #include "dcmtk/dcmdata/dctk.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); TestA w; w.show(); DcmFileFormat fileformat; OFCondition oc = fileformat.loadFile("111.dcm"); if(oc.good()){ OFString patientName; if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good()) { qDebug()<<"Patient Name:"<<patientName.data(); } } return a.exec(); } " allownetworking="internal"> 收藏代碼
  1. #include "testa.h"  
  2. #include   
  3. #include   
  4. #include "dcmtk/config/osconfig.h"  
  5. #include "dcmtk/dcmdata/dctk.h"  
  6.   
  7. int main(int argc, char *argv[])  
  8. {  
  9.     QApplication a(argc, argv);  
  10.     TestA w;  
  11.     w.show();  
  12.   
  13.     DcmFileFormat fileformat;  
  14.     OFCondition oc = fileformat.loadFile("111.dcm");  
  15.     if(oc.good()){  
  16.         OFString patientName;  
  17.         if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())  
  18.         {  
  19.             qDebug()<<"Patient Name:"<<patientName.data();  
  20.         }  
  21.     }  
  22.   
  23.       
  24.     return a.exec();  
  25. }  
 

       1、配置項目屬性

 A. 新建一個Qt application,把以上源代碼複製粘貼進main.cpp去。  
B. 右鍵單擊工程名,選擇屬性(properties),在Configuration Properties->C/C++->General下,
Additional Include Directories里加入上一步編譯出來的include文件夾,我的Win7 32bit電腦上是
C:\Program Files\DCMTK\include,這一步是爲了讓程序能夠找到頭文件。(Win7 64bit 路徑是:
C:\Program Files (x86)\ DCMTK\include)
C. C/C++->code generation裏,Runtime Library 選擇/MDd,這一步是要和之前CMAKE的編譯選項一致。
(我的Qt項目默認就是/MDd)  
D. Linker->General裏,Additional Library Directories裏填寫上一步編譯出來的lib文件夾,我的Win7 32bit
電腦上是C:\Program Files\DCMTK\lib,這一步是爲了讓程序能夠找到之前編譯好的lib文件。(Win7 64bit 路徑是:
C:\Program Files (x86)\ DCMTK\lib)  
E. Linker->Input裏,在Additional Dependencies 裏依次加上
wsock32.lib netapi32.lib ofstd.lib oflog.lib dcmdata.lib zlib.lib
這一步是加入具體我們程序需要的lib文件。網上很多的帖子中,都沒有提到oflog.lib這個文件,可能是由於舊的版本中
並沒有使用到這個文件。但是對於3.6.0版,這個lib文件是必需的。我們例子中只需要如上幾個Lib,如果還需要其他
dcmtk 的lib,請遵守以下引入順序。
F. Apply ,ok,編譯工程,運行,命令行應該輸出Patient Name:he ying hou 。

 

附件上有一個DICOM的圖像
附件1: 111.dcm


參考文章:
發佈了71 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章