• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            羅朝輝(飄飄白云)

            關(guān)注嵌入式操作系統(tǒng),移動平臺,圖形開發(fā)。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks

            在 iOS 平臺上編譯 DCMTK

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

            CC 許可,轉(zhuǎn)載請注明出處

            DCMTK是德國 Offis  公司開發(fā)的實(shí)現(xiàn) DICOM 協(xié)議的跨平臺開源 C++庫,在醫(yī)學(xué)領(lǐng)域里是很有名的,它支持Windows ,Linux,Mac OS,SUN等平臺。不過貌似在 iOS 平臺上編譯 DCMTK 的文檔很少很少,折騰了好久終于編譯成功了,記錄下來。

            我的編譯環(huán)境:
            Mac OS 10.6
            XCode 4.0.2
            iOS SDK 4.3

            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,運(yùn)行 CMake,按照如下圖所示步驟執(zhí)行:

            4.1,設(shè)置 dcmtk 源文件目錄以及編譯目錄
            4.2,點(diǎn)擊 Configure,在彈出的對話框中選中 XCode:

            4.3,如果 configure 運(yùn)行顯示 error, Don't worry!
            4.4,配置 CMake 選項(xiàng):
            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,再次點(diǎn)擊 configure,運(yùn)行,這次應(yīng)該沒有錯誤了;
            4.5,然后點(diǎn)擊 generate,就會在 dcmtk-xcode 下生成名為 DCMTK.xcodeproj 的 xcode 工程。

            5,打開 DCMTK.xcodeproj 工程,點(diǎn)擊工程名,查看 Build Setting,設(shè)置 Base SDK 為 Latest Mac OS(Mac OS 10.X),編譯 target 為 ALL_BUILD;

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

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

            8,編譯成功之后,點(diǎn)擊工程名,查看 Build Setting,設(shè)置 Base SDK 為 Latest iOS(iOS x),設(shè)置 Architectures 為 Standard,設(shè)置 Build Active Architecture only 為 Yes;

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

            10,再次編譯 ALL_BUILD,如果沒有錯誤報出,恭喜 Dcmtk 已經(jīng)編譯成功!

            12,新建 dcmtk 目錄,將相關(guān)的 include 和 .a lib 文件拷貝到對應(yīng)的目錄下,最終目錄結(jié)構(gòu)如下:
            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:

            11,新建一個 iOS 應(yīng)用程序工程,將上面的文件夾拷貝到工程目錄下,設(shè)置工程的 Build Setting/Header Search Paths 為 PathToYourDcmtk/dcmtk/include,然后在工程 Target 的 Build Phases/Link Binary With Libraries 追加 libPlatform/*.a文件。
            12,在某個.mm文件(ObjC與C++混編,可修改已有文件的后綴)中,導(dǎo)入頭文件,編寫代碼測試:

            #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);

                }

             

            13, 如果要在設(shè)備上運(yùn)行,需要將 dcmtk 重新編譯一次 ios device 版本,然后鏈接新的 dcmtk 設(shè)備版庫。然后再編譯 app,這時如果出現(xiàn)  “Undefined symbols for architecture armv7:   "_inflateEnd"” 類似的錯誤,可以在 build setting 中設(shè)置 Other Linker Flags 為 /usr/lib/libz.dylib 即可。

             

            posted on 2011-11-10 12:59 羅朝輝 閱讀(9347) 評論(13)  編輯 收藏 引用 所屬分類: Cocoa 開發(fā)醫(yī)療開發(fā)

            評論

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2011-11-12 00:01 攀升
            有意思,我也要找時間研究下  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2011-11-22 11:27 路人
            你好,我在第十步編譯失敗,請問可以通過郵箱與您交流么?我的郵箱是406891663@qq.com  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2011-11-22 20:23 羅朝輝
            @路人

            你確認(rèn)你刪除了步驟 9 中所有的非 lib 的 dependencies?  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2011-12-27 23:24 路人
            使用CMake 2.8.6編譯dcmtk-3.6.1_20110922.tar.gz,可以順利的生成xcode項(xiàng)目文件。打開時卻提示:DCMTK.xcodeproj cannot be opened because the project file cannot be parsed。 你有遇到這種情況嗎?  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2011-12-28 12:24 羅朝輝
            @路人

            3.6.1 我沒有試驗(yàn)過。。。  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2012-02-13 22:47 polinzhuo
            有上線軟件嗎,可以探討一下。polinzhuo@163.com  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2012-06-07 14:54 terran
            我按照你的方法把庫都編譯好了(模擬器版本的和device版本的都編譯成功了),在模擬器上面運(yùn)行正常,但是編譯到機(jī)器上面跑的時候鏈接新的 dcmtk 設(shè)備版庫時候出了問題:
            Undefined symbols for architecture armv7:
            "__ZN13DcmFileFormatD1Ev", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN21DJDecoderRegistration7cleanupEv", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN13DcmFileFormat10getDatasetEv", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN21DJDecoderRegistration14registerCodecsE35E_DecompressionColorSpaceConversion13E_UIDCreation21E_PlanarConfigurationb", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN13DcmFileFormat8saveFileEPKc16E_TransferSyntax14E_EncodingType16E_GrpLenEncoding17E_PaddingEncodingjj15E_FileWriteMode", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN10DcmDataset20chooseRepresentationE16E_TransferSyntaxPK26DcmRepresentationParameter", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN10DiRegisterD1Ev", referenced from:
            __GLOBAL__I_a in ViewController.o
            "__ZN13DcmFileFormatC1Ev", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN8OFStringD1Ev", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN13DcmFileFormat8loadFileEPKc16E_TransferSyntax16E_GrpLenEncodingj14E_FileReadMode", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN10DicomImageC1EPKcmmm", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN10DiRegisterC1Ev", referenced from:
            __GLOBAL__I_a in ViewController.o
            "__ZN7DcmItem18findAndGetOFStringERK9DcmTagKeyR8OFStringmb", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            "__ZN8OFStringC1Ev", referenced from:
            -[ViewController decodeStillImage:] in ViewController.o
            而且我也按照你說的把在 build setting 中設(shè)置 Other Linker Flags 為 /usr/lib/libz.dylib了還是有問題。
            你知道這是怎么回事兒嘛?望指教,謝謝:)。
            我的運(yùn)行環(huán)境是xcode4.3.2 ios5.1
            我的郵箱是terran_lang@hotmail.com。希望得到你的指教。  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2012-08-26 22:46 leomay
            @羅朝輝
            刪除第9步中的target dependencies會crash掉xcode,我用的是ios5.1,llvm-gcc編譯器,謝謝  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2012-09-18 15:59 謝云偉
            我的qq是648098050,能加下嗎?我實(shí)在不知道后續(xù)怎么做  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK[未登錄] 2012-11-03 11:00 jim
            如何獲取圖像呢,我用savefile,一直是失敗,什么問題呢,謝謝。  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2014-07-22 17:41 owen263 at gmail.com
            @路人 我的也是這種情況。求助。
              回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2014-08-18 15:05 lev
            3.6.1DCMTK.xcodeproj cannot be opened because the project file cannot be parsed,qq:664394181,有沒有人有同樣問題 是什么問題啊?  回復(fù)  更多評論
              

            # re: [iOS]在 iOS 平臺上編譯 DCMTK 2014-10-08 12:38 iOS
            方便加我QQ么?編譯成功 但是不能用其中的庫函數(shù)。我的QQ1930401157  回復(fù)  更多評論
              

            国产69精品久久久久观看软件| 久久无码AV中文出轨人妻| 久久香综合精品久久伊人| 久久久无码精品亚洲日韩京东传媒| 亚洲色欲久久久久综合网| 亚洲av日韩精品久久久久久a| 99久久免费国产精精品| 久久91精品综合国产首页| 久久精品国产男包| 久久青青草原综合伊人| 2020久久精品亚洲热综合一本| 亚洲色欲久久久综合网东京热| 久久精品国产亚洲欧美| 精品国产乱码久久久久久人妻| 久久久久久久综合日本亚洲 | 久久人人爽人人爽人人片av高请| 久久精品国产网红主播| 一本久久a久久精品综合香蕉 | 久久久无码精品亚洲日韩京东传媒 | 久久天天躁狠狠躁夜夜av浪潮| 少妇人妻88久久中文字幕| 国产亚州精品女人久久久久久 | 国产日韩久久久精品影院首页| 丁香色欲久久久久久综合网| 亚洲Av无码国产情品久久| 久久精品人人做人人爽电影| 亚洲精品国精品久久99热一| 国产精品一区二区久久精品涩爱| 国产成人精品久久亚洲高清不卡 | 久久亚洲AV成人无码国产| 久久人人爽人人爽人人片AV高清| 国产精品一区二区久久精品无码 | 久久青青草原国产精品免费| 久久精品国产亚洲av水果派 | 99精品国产在热久久无毒不卡 | 亚洲AV伊人久久青青草原| 国产亚州精品女人久久久久久| 91精品国产91久久久久久| 久久精品嫩草影院| 国产精品久久久久9999| 国产精品美女久久久|