[Cocoa,醫學]在iOS平台上編譯DCMTK

來源:互聯網
上載者:User

在iOS平台上編譯 DCMTK

羅朝輝 (http://www.cnblogs.com/kesalin/)

本文遵循“署名-非商業用途-保持一致”創作公用協議

DCMTK是德國 Offis  公司開發的實現 DICOM 協議的跨平台開源 C++庫,在醫學領域裡是很有名的,它支援Windows ,Linux,Mac OS,SUN等平台。不過貌似在 iOS 平台上編譯 DCMTK 的文檔很少很少,折騰了好久終於編譯成功了,記錄下來。

我的編譯環境:
Mac OS 10.6
XCode 4.0.2
iOS SDK 4.3

後記:iOS 5 無論是 simulator 還是 device 編譯也都可以順利通過。

 

1,首先下載最新的 DCMTK:http://www.dcmtk.org/,目前的版本為:dcmtk-3.6.0;

 

2,下載最新的 CMake:http://www.cmake.org/,安裝;

 

3,解壓 dcmtk 至 dcmtk-3.6.0,並建立目錄 dcmtk-xcode;

 

4,運行 CMake,按照如所示步驟執行:

4.1,設定 dcmtk 源檔案目錄以及編譯目錄

4.2,點擊 Configure,在彈出的對話方塊中選中 XCode:

4.3,如果 configure 運行顯示 error, Don't worry!

4.4,配置 CMake 選項:

DOXYGEN : OFF 
OPENSSL : OFF (optional : you need to have openssl libs for IOS) 
PNG:  OFF (optional) 
PRIVATE_TAGS : ON (optional) 
THREADS : OFF (optional) 
TIFF : OFF (optional) 
XML : OFF (optional) 
ZLIB : ON (optional) 

4.5,再次點擊 configure,運行,這次應該沒有錯誤了;

4.6,然後點擊 generate,就會在 dcmtk-xcode 下產生名為 DCMTK.xcodeproj 的 xcode 工程。

 

5,開啟 DCMTK.xcodeproj 工程,點擊工程名,查看 Build Setting,設定 Base SDK 為 Latest Mac OS(Mac OS 10.X),編譯 target 為 ALL_BUILD;

 

6,然後編譯運行,編譯時間很長,你可以去這裡:http://code.google.com/p/ios-static-libraries/,下載編譯好的其他 lib for iOS,如 zlib,openssl 等。

 

7,編譯應該沒有錯誤,如果報出找不到 libc.h,可以直接 comment 這一行,build again!

 

8,編譯成功之後,點擊工程名,查看 Build Setting,設定 Base SDK 為 Latest iOS(iOS x),設定 Architectures 為 Standard,設定 Build Active Architecture only 為 Yes;

 

9,修改 TARGETS 列表下 ALL_BUILD 的 Target Dependencies,將其下所有非 lib 的dependencies 刪除:

 

10,再次編譯 ALL_BUILD,如果沒有錯誤判出,恭喜 Dcmtk 已經編譯成功!

 

11,建立 dcmtk 目錄,將相關的 include 和 .a lib 檔案拷貝到對應的目錄下,最終目錄結構如下:

Copy dcmtk-3.6.0/XXX/include to dcmtk/include/dcmtk/XXX(except for config)
Copy dcmtk-xcode/include/dcmtk/config to dcmtk/include/dcmtk/config
Copy zlib.h to dcmtk/include/zlib.h
Copy dcmtk-xcode/XXX/libsrc/Debug-iphonePLATFORM/libXXX.a to dcmtk/lib-iphonePLATFORM/libXXX.a
Copy libz.a to dcmtk/lib-iphonePLATFORM/libz.a

include:

libs:

 

12,建立一個 iOS 應用程式工程,將上面的檔案夾拷貝到工程目錄下,設定工程的 Build Setting/Header Search Paths 為 PathToYourDcmtk/dcmtk/include,然後在工程 Target 的 Build Phases/Link Binary With Libraries 追加 libPlatform/*.a檔案。

 

13,在某個.mm檔案(ObjC與C++混編,可修改已有檔案的尾碼)中,匯入標頭檔,編寫代碼測試:

#include <dcmtk/config/osconfig.h>
#include <dcmtk/dcmdata/dcfilefo.h>
#include <dcmtk/dcmdata/dcdeftag.h>

NSString *dcmFilename = @"/Users/luozhaohui/2.dcm";
DcmFileFormat fileFormat;
OFCondition loadStatus = fileFormat.loadFile([dcmFilename UTF8String]);
if (loadStatus.good())
{
OFString patientName;
OFCondition findStutas = fileFormat.getDataset()->findAndGetOFString(DCM_PatientName, patientName);
if (findStutas.good())
{
NSString *name = [NSString stringWithUTF8String:patientName.c_str()];
NSLog(@" >> %@ patient name is [%@]", dcmFilename, name);
}
}
else
{
NSLog(@" >> Failded to load %@!", dcmFilename);
}

14, 如果要在裝置上運行,需要將 dcmtk 重新編譯一次 ios device 版本,然後連結新的 dcmtk 裝置版庫。然後再編譯 app,這時如果出現  “Undefined symbols for architecture armv7:   "_inflateEnd"” 類似的錯誤,可以在 build setting 中設定 Other Linker Flags 為 /usr/lib/libz.dylib 即可。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.