2015-09-22 3 views
16

साथ OpenCV आईओएस संकलित करने के लिए जब मैं OpenCV के साथ अपने XCode प्रोजेक्ट को संकलित करने की कोशिश की 2.4 XCode 7 का उपयोग आईओएस + iOS SDK 9, XCode शिकायत की किकैसे ENABLE_BITCODE

ld: 'opencv2.framework/opencv2(alloc.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

और लिंक करने के लिए मना कर दिया। कुछ googling के बाद, यह turns out होने के कारण ऐप्पल ने ऐप स्टोर के भीतर ऐप ऑप्टिमाइज़ेशन के लिए बिटकोड नामक एक नई सुविधा जोड़ा। जबकि ओपनसीवी आईओएस बाइनरी को बिटकोड को शामिल करने के लिए अपडेट नहीं किया गया है, यह लिंक चरण पास नहीं कर सकता है।

कुछ referenceENABLE_BITCODE को अक्षम करने के लिए एक अस्थायी समाधान की ओर इशारा किया गया ताकि लिंक बिटकोड के बिना किया जा सके। यह ऐप्पल घड़ियां के लिए ऐप को संकलित करने से रोक देगा क्योंकि वॉच ऐप के लिए बिटकोड अनिवार्य है। इसलिए मेरा सवाल यह है कि, बिटकोड सक्षम के साथ आईओएस ओपनसीवी संकलित करने के लिए कुछ (सर्वोत्तम आसान) तरीके हैं? (संकलित ढांचे के लिए डाउनलोड लिंक के साथ बेहतर)

उत्तर

18

कुछ खोज और परीक्षण के बाद, मैंने बिटकोड के साथ स्रोत से ओपनसीवी आईओएस संकलित करने का एक तरीका निकाला। एक संकलित बाइनरी भी यहां प्रदान की जाती है: [v3.0][v2.4]। [अस्वीकरण: संकलित बाइनरी की अखंडता के लिए मैं ज़िम्मेदार नहीं हूं। अपने जोखिम पर प्रयोग करें।]

संकलन के चरण मूल रूप से official document के समान ही हैं, केवल एक अतिरिक्त चरण के साथ।

  1. डाउनलोड Git के साथ कोड:

    cd ~/<my_working_directory>

    git clone https://github.com/Itseez/opencv.git

  2. Xcode OpenCV स्क्रिप्ट संकलक को खोजने का निर्माण करने देने के लिए के लिए प्रतीकात्मक कड़ी बनाने, हेडर फाइल आदि

    cd /

    sudo ln -s /Applications/Xcode.app/Contents/Developer Developer

  3. [कुंजी चरण] बदलें Bitcode के लिए अतिरिक्त विकल्प जोड़ने के लिए संकलन स्क्रिप्ट: ~/<my_working_directory>/opencv/platform/ios/build_framework.py संपादित करें, और -DCMAKE_C_FLAGS युक्त पंक्ति का पता लगाएं। -fembed-bitcode का ध्वज जोड़ें। उदाहरण के लिए, स्रोत मुझे मिल गया में, यह लाइन 55 है, और परिवर्तन के बाद की तरह

    "-DCMAKE_C_FLAGS=\"-Wno-implicit-function-declaration -fembed-bitcode\" " +

    दिखेगा। [ref]

  4. बिल्ड OpenCV ढांचा:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    यदि सब कुछ ठीक है, कुछ मिनट बाद आप ~/<my_working_directory>/ios/opencv2.framework मिल जाएगा। आप इस ढांचे को अपने एक्सकोड परियोजनाओं में जोड़ सकते हैं।

पीएस एक सवाल पूछें, भले ही आप पहले ही जानते हैं कि मेटा स्टैकचेंज पर this post के अनुसार उत्तर को प्रोत्साहित किया जाता है।

+2

मैंने पाया कि ओपनसीवी (संस्करण 3.1) का नया संस्करण पहले से ही -femwork-bitcode ध्वज है build_framwork.py फ़ाइल – CSawy

+0

@CSstudent सिर के लिए धन्यवाद! – grapeot

+0

@ ग्रेपोट मैंने एक ही कदम का पालन किया है लेकिन चरण 4 के रूप में मुद्दों का सामना करना है। कृपया मेरी मदद करें। मैं आपको लॉग दिखा सकता हूं लेकिन वे चरित्र सीमा से अधिक हैं। तो यहां पोस्ट नहीं कर सकते हैं। –

7

ओपनसीवी ठीक तरह का सॉफ़्टवेयर है (ऑडियो और वीडियो कोडेक्स के साथ) जिसमें हाथ से लुढ़का हुआ एआरएम नियॉन ऑप्टिमाइज़ेशन होने की संभावना है। documentation बताता है कि ~ 40 कार्यों ने ओपनसीवी 3.0 में यह उपचार किया है।

यदि एलएलवीएम बिट-कोड के लिए संकलन करते हैं तो आपको जेनेरिक (कम अनुकूलन, सी या सी ++ में लागू संस्करण) प्राप्त होंगे।

बिटकोड का उपयोग वैकल्पिक है - ऐप्पल घड़ी के लिए संकलन करते समय, जहां यह कल्पना करना मुश्किल है कि आप कम्प्यूटेशनल जटिल छवि प्रसंस्करण को वैसे भी चलाएंगे। यदि आप घड़ी ऐप को बंडल कर रहे हैं, तो केवल उस पर बिटकोड के लिए बिल्ड सेटिंग ओवरराइड करें।

संबंधित मुद्दे