2014-03-07 1 views
2

ios 프레임 워크를 컴파일 할 때 opencv 설치 문서 Installation in iOS을 따르고 있습니다. 내가 platform/ios/build_framework.py을 변경하고 프레임 워크를 구축하지 않은 경우, 나는 다음과 같은 오류가있을 것이다 :아키텍처 arm64 및 x86_64 용 opencv ios 프레임 워크를 만들 수 없습니다.

build settings from command line: 
    ARCHS = x86_64 
    IPHONEOS_DEPLOYMENT_TARGET = 6.0 
    SDKROOT = iphonesimulator6.1 

Build Preparation 
Build task concurrency set to 8 via user default IDEBuildOperationMaxNumberOfConcurrentCompileTasks 

=== BUILD AGGREGATE TARGET ZERO_CHECK OF PROJECT OpenCV WITH CONFIGURATION Release === 
Check dependencies 


=== BUILD NATIVE TARGET zlib OF PROJECT OpenCV WITH CONFIGURATION Release === 

=== BUILD NATIVE TARGET libjpeg OF PROJECT OpenCV WITH CONFIGURATION Release === 

** BUILD FAILED ** 

Build settings from command line: 
    ARCHS = x86_64 
    IPHONEOS_DEPLOYMENT_TARGET = 6.0 
    SDKROOT = iphonesimulator6.1 

=== BUILD NATIVE TARGET zlib OF PROJECT OpenCV WITH CONFIGURATION Release === 
Check dependencies 
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386). 


** BUILD FAILED ** 

그런 다음, 많은 시도 후, 나는 발견 난 단지를 변경하여 건축하는 ARMv7, armv7s 및 i386을위한 컴파일하는 경우 platform/ios/build_framework.py에있는 스크립트를 따르면 프레임 워크를 성공적으로 빌드 할 수 있습니다.

targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"] #"iPhoneOS", "iPhoneSimulator" 
    archs = ["armv7", "armv7s", "i386"]#"arm64", , "x86_64" 
    for i in range(len(targets)): 
     build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i]) 

arm64 및 x86_64 아키텍처를 컴파일하는 방법에 대한 아이디어가 있습니까? 감사.

답변

0

x86_64 아키텍처 용으로 컴파일하는 경우 OS X (노트북 또는 Mac 타워) 용이며 iOS (iPad, iPhone 용)는 아닙니다.

무엇을 사용하고 계십니까? Xcode가 아닌가?

64 비트 Mac 랩톱 또는 데스크톱에서 실행하고 싶지 않으면 x86_64로 컴파일 할 필요가 없습니다. & 질문에 의해 그렇게하는 것 같지 않습니까?

또한 i386 용으로 사용하는 경우 대부분의 OS X 시스템과 호환 될 수 있습니다. 64 비트가 아닌 32 비트에서만 실행됩니다.

arm64까지는 64 비트이기도합니다. 64 비트 용 라이브러리가 없을 수도 있습니다. 컴퓨터가 64 비트에서 실행되고 있습니까? opencv 라이브러리 (동적 또는 정적입니까?) &이 32 또는 64인지 확인하십시오. 32 비트이면 문제가됩니다. 64 비트 라이브러리로 빌드하거나 찾아야합니다. 자신이 어떤 플랫폼을 사용하고 있는지 알지 못해도 더 이상 정보를 제공 할 수 없습니다.

+0

의견을 보내 주셔서 감사합니다. 나는 지금 ios (ipad와 iphone)를 xcode로 컴파일하고있다. 실제로 내 Mac은 64 비트 데스크탑이므로 내 컴퓨터는 64 비트에서 실행될 수 있습니다. – feelfree

+0

iPhone 5도 64 비트입니다. – JoeyJAL

0

최근에 iOS 용 OpenCV가 CocoaPods에 추가되었음을 알게되었습니다. podspec here과 Github 저장소 here을 볼 수 있습니다. CocoaPods, 당신은 프로젝트의 루트에라는 이름의 파일 Podfile을 만들고이 줄을 붙여 넣습니다

pod 'OpenCV' 

파일을 저장하고 (CocoaPods 물론 설치되어 있다고 가정) 터미널에서 pod install를 실행합니다.

저는 64 비트이기도 한이 iPhone 5S를 실행하고 있습니다.

2

i386을 꺼내서 armv7, armv7s 및 arm64 용으로 컴파일하십시오. 이는 64 비트 -iphone5 용 Xcode 아키텍처 옵션입니다.

인텔과 암 사양을 섞어 사용하지 마십시오. 혼합 할 수 없으며 혼합 할 수 없습니다. architecture 명령은 객체 코드가 어떻게 생성 될지 컴파일러에게 알려주는 것입니다. 인텔은 CISC 프로세서이고 암은 내부적으로 RISC이므로 객체 코드는 매우 다릅니다. 예를 들어 MOVE 명령은 ARM에 대해 x'80'opcode (명령 명령)를 생성 할 수 있지만 x'60 '는 생성 할 수 없습니다. 내가 알고있는 한 i386은 오래된 인텔 32 비트 아키텍처이다. Xcode는 인텔과 RISC 모두에서 실행될 수있는 보편적 인 객체 코드를 갖기 위해 마술을하고있다. 효율적이지는 않을 것이다. 특정 아키텍처로 컴파일하십시오.

32 비트, 64 비트 128 .....는 프로세서 레지스터의 크기이며 CPU에서 얼마나 많은 메모리 (RAM)에 액세스 할 수 있는지 결정합니다.일반적으로 거대한 RAM을 가질 수있는 능력 외에, 상위 비트 프로세서는 일반적으로 특정 작업을 수행하는 명령어의 수를 줄입니다.

일반적으로 하위 호환성이 내장되어 있기 때문에 armv6 용으로 컴파일 된 응용 프로그램은 일반적으로 호환 모드에서 armv7 또는 arm64에서 실행되지만 실제 64 비트 응용 프로그램을 실행하는 장점을 활용할 수는 없습니다.

대상은 어떤 명령을 사용할 수 있는지를 지정하는 고급 사양입니다. 예를 들어 iPad에는 UIPopViewController가 있지만 iPhone 또는 iPod touch에서는 지원되지 않습니다.

마지막으로 한 가지만 - iPhone 5s만이 arm64와 함께 작동합니다. 다른 대상을 설정하면 아마 arm4가 옵션이 아닌 것으로 표시됩니다.

관련 문제