2015-09-22 21 views
16

Khi tôi cố gắng biên dịch dự án XCode của tôi với OpenCV 2.4 iOS sử dụng XCode 7 + iOS SDK 9, XCode phàn nàn rằngLàm thế nào để biên dịch OpenCV iOS với 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)

và từ chối liên kết. Sau khi một số googling, nó turns out được bởi vì Apple đã thêm một tính năng mới có tên Bitcode cho tối ưu hóa ứng dụng trong App Store. Trong khi OpenCV iOS nhị phân chưa được cập nhật để bao gồm Bitcode, nó không thể vượt qua giai đoạn liên kết.

Một số reference chỉ ra một giải pháp tạm thời để tắt ENABLE_BITCODE để liên kết có thể được thực hiện mà không cần Bitcode. Điều này sẽ ngăn ứng dụng được biên dịch cho Đồng hồ Apple vì Bitcode là bắt buộc đối với Ứng dụng xem. Vì vậy, câu hỏi của tôi là, có cách nào (tốt nhất) dễ dàng để biên dịch iOS OpenCV với Bitcode được kích hoạt? (tốt hơn với liên kết tải xuống cho khung được biên dịch)

Trả lời

18

Sau khi tìm kiếm và thử nghiệm, tôi đã tìm ra cách để biên dịch OpenCV iOS từ nguồn bằng Bitcode. Một nhị phân được biên dịch cũng được cung cấp tại đây: [v3.0][v2.4]. [Từ chối trách nhiệm: Tôi không chịu trách nhiệm về tính toàn vẹn của tệp nhị phân đã biên dịch. Sử dụng rủi ro của riêng bạn.]

Các bước biên dịch về cơ bản giống như official document, chỉ với một bước phụ.

  1. Tải mã với git:

    cd ~/<my_working_directory>

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

  2. Hãy liên kết tượng trưng cho Xcode để cho OpenCV xây dựng các kịch bản tìm ra trình biên dịch, các file tiêu đề vv

    cd /

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

  3. [Bước Key] Thay đổi kịch bản biên soạn để thêm tùy chọn thêm cho Bitcode: chỉnh sửa ~/<my_working_directory>/opencv/platform/ios/build_framework.py, và tìm đến dòng chứa -DCMAKE_C_FLAGS. Thêm cờ của -fembed-bitcode. Ví dụ, trong nguồn tôi có, đó là dòng 55, và sẽ trông giống như

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

    sau khi thay đổi. [ref]

  4. Build OpenCV khuôn khổ:

    cd ~/<my_working_directory>

    python opencv/platforms/ios/build_framework.py ios

    Nếu mọi thứ đều tốt, một vài phút sau đó bạn sẽ nhận được ~/<my_working_directory>/ios/opencv2.framework. Bạn có thể thêm khung này vào các dự án Xcode của mình.

P.S. Đặt câu hỏi, ngay cả khi bạn đã biết câu trả lời được khuyến khích theo this post trên Meta Stackchange.

+2

Tôi thấy rằng phiên bản mới của opencv (phiên bản 3.1) đã có cờ-bit-bit-bit trong tệp build_framwork.py – CSawy

+0

@CSstudent Cảm ơn bạn đã đứng đầu! – grapeot

+0

@grapeot Tôi đã làm theo các bước tương tự nhưng phải đối mặt với các vấn đề như bước 4. Vui lòng giúp tôi. Tôi có thể hiển thị cho bạn nhật ký nhưng chúng vượt quá giới hạn ký tự. Vì vậy, không thể đăng bài ở đây. –

7

OpenCV chính xác là loại phần mềm (cùng với Codec âm thanh và video) có khả năng có tối ưu ARM NEON được cuộn bằng tay. Các documentation cho thấy rằng ~ 40 chức năng đã có điều trị này trong OpenCV3.0.

Nếu biên dịch mã bit LLVM, bạn sẽ nhận được các phiên bản chung (ít được tối ưu hóa, được triển khai trong C hoặc C++) thay thế.

Sử dụng Bitcode là tùy chọn - ngoại trừ khi biên dịch cho đồng hồ Apple, ở đó khó có thể tưởng tượng bạn sẽ chạy xử lý ảnh phức tạp về tính toán. Nếu bạn đang nhóm ứng dụng đồng hồ, hãy ghi đè cài đặt bản dựng chỉ cho bitcode.

Các vấn đề liên quan