2012-12-20 2 views
0

지금이 문제가 며칠 동안 진행되어 왔고 앞으로 나아갈 수 없었습니다. MonoTouch 바인딩 프로젝트를 사용하여 바인드하려고하는 원시 Obj-C 라이브러리가 있습니다. 바인딩 Dll이 만들어 지지만 앱으로 가져 와서 컴파일하려고하면 MT5202 네이티브 연결 실패 아키텍처 armv7에 대한 정의되지 않은 기호 :

MT5202 Native linking failed error.

빌드 출력을 읽으면 컴파일 할 iOS 버전의 심볼이 없음을 알 수 있습니다. I로 시작하기 (몇 표시) 연결 문제의 번호를 보여주는 빌드 출력

 "_CVPixelBufferGetPixelFormatType", referenced from: 
     -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] in libQuickMarkSDK.a(DecodePickerController.o) 
     -[QMImageUtil saveToAlbum:] in libQuickMarkSDK.a(QMImageUtil.o) 
    "_CVPixelBufferGetPlaneCount", referenced from: 
     +[QMImageUtil imageBufferSave:f:] in libQuickMarkSDK.a(QMImageUtil.o) 
     +[QMImageUtil imageBuffer:zoom:w:h:f:] in libQuickMarkSDK.a(QMImageUtil.o) 
    "_CVPixelBufferGetWidth", referenced from: 
     -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] in libQuickMarkSDK.a(DecodePickerController.o) 
     -[QMImageUtil saveToAlbum:] in libQuickMarkSDK.a(QMImageUtil.o) 
    "_CVPixelBufferGetWidthOfPlane", referenced from: 
     +[QMImageUtil imageBufferSave:f:] in libQuickMarkSDK.a(QMImageUtil.o) 
    "_CVPixelBufferLockBaseAddress", referenced from: 
     -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] in libQuickMarkSDK.a(DecodePickerController.o) 
    "_OBJC_CLASS_$_AVCaptureDevice", referenced from: 
     objc-class-ref in libQuickMarkSDK.a(QuickMarkCameraUtil.o) 
    "_OBJC_CLASS_$_AVCaptureDeviceInput", referenced from: 
     objc-class-ref in libQuickMarkSDK.a(QuickMarkCameraUtil.o)

Undefined symbols for architecture armv7:

는 바인딩 그냥 오류라고 생각했다. 그래서 바인딩을 다시 작성했습니다. 기쁨이 없습니다. 그래서 이론을 테스트하기 위해 github에서 사용 가능한 RedLaser 모노 바인딩을 사용하려고했습니다. 이것은 또한 동일한 오류를 제공했습니다. (-unsafe가 makefile에서 제거 된 경우).

나는 결합하는 데 필요한 라이브러리에 대한 linkwith 문은

assembly: LinkWith ("libQuickMarkSDK.a", LinkTarget.ArmV7, ForceLoad = true, Frameworks = "AVFoundation CFNetwork CoreMedia CoreVideo libz.1.2.5.dylib MobileCoreServices QuartzCore Foundation SystemConfiguration")]

이며, 사용되는 Monotouch 추가 플래그 내가 다른 문제를 많이 읽고

-cxx

하지만 아무것도를 해결하는 데 도움이 없다 어떤 문제라도 도움이 될 것입니다.

+1

시뮬레이터에서 실행하려면이'LinkTarget.ArmV7을 필요 | LinkTarget.Simulator', 시뮬레이터 또는 장치에서이 작업을 시도하고 있습니까? – jonathanpeppers

+0

안녕하세요, 응답을 주셔서 감사합니다.하지만 시뮬레이터는 실행 가능 타겟이 아닙니다. 네이티브 라이브러리에서 카메라를 사용하기 때문입니다. 오류가 i386에 대한 정의되지 않은 기호 였다면 문제를 이해할 수있었습니다. –

답변

0

특정 버전 번호 (iOS, Xcode, MonoTouch ...)를 언급하지 않으므로 특정/확실한 답변을 드릴 수 없습니다.

ARMv6에 대한 지원이 제거 된 iOS6/Xcode 4.5로 프로젝트를 업데이트하면 이러한 상황이 발생할 수 있습니다. 네이티브 라이브러리에 ARMv6 만 포함 된 경우 바인딩 프로젝트가 아닌 기본 라이브러리를 ARMv7 용으로 다시 컴파일해야합니다 (현재 요구 사항이므로).

이 일을 시도하십시오 확인 (네이티브 라이브러리의 전체 경로를 포함한다)하려면
file libQuickMarkSDK.a 

는 당신에게 구조 네이티브 라이브러리 지원을 말해야한다 그. 그것들은 당신이 바인딩 프로젝트에서 제공하는 LinkTarget과 일치 할 필요가 있습니다 (그렇지 않으면 네이티브 링커로부터 에러가 발생합니다).

+0

안녕하세요, 응답 주셔서 감사합니다. 모노 터치와 xCode의 최신 버전으로 업그레이드했습니다. 이것이 문제가 될 수 있음을 알고 있습니다. 그러나 제 3 자 라이브러리를 사용하는 또 다른 응용 프로그램이 있습니다. 래퍼는 다시 컴파일되지 않았고 문제가 발생하지 않습니다. 그러나 내가 제안한대로 라이브러리가 아키텍처를 지원하는지 다시 한 번 확인할 것입니다. 다시 한번 감사 드리며 내가 어떻게 일어나는지 알려 드리겠습니다. –

+0

lipo-info의 결과는 armv7 (cputype (12) cpusubtype (11)) 아키텍처 유형 2 개를 보여줍니다. 두 번째 아키텍처는 armv7에 대한 것으로 이해해야합니다. 내가 생각할 수있는 유일한 점은 내가 알지 못하는 연결될 필요가있는 다른 라이브러리가 있다는 것입니다. –

+1

@AshWilliams 메시지를 피하기 위해서는 (장치에 대해) 잘되어야합니다. 'libz.1.2.5.dylib' (프레임 워크는 아니지만 라이브러리 - 틀린 장소)를 제거하고 AV * 관련 코드가있는 이름 인'AVFoundation'을 추가하십시오. 그 추측들 외에 우리는 무엇이 잘못되었는지를 알기 위해 완전한 테스트 케이스 (bugzilla)가 필요합니다. – poupou

0

마지막 코멘트에 poupou의 제안을 시도 했습니까? Simulator 용이 아닌 iPhone 용으로 컴파일 할 때도 같은 오류가 발생했습니다. LinkWith 섹션에 여러 개의 누락 된 프레임 워크가 있음을 발견했습니다. 누락 된 프레임 워크를 해결하기 위해, 나는 예를 들어 CVPixelBufferGetWidthOfPlane Framework을 봤다.

이 답변에 대한 신용 cheeesus로 이동 : MonoTouch Build: ld: symbol(s) not found for architecture armv7

관련 문제