MT5202本机链接失败架构armv7的未定义符号:

时间:2012-12-20 11:35:47

标签: xamarin.ios

我这个问题已经存在了好几天了,并且无法取得任何进展。 我有一个原生的Obj-C库,我试图使用MonoTouch绑定项目进行绑定。绑定Dll已创建,但当我将其导入应用程序并尝试编译时,我得到了一个

MT5202 Native linking failed error.

读取构建输出显示我正在编译的iOS版本的符号缺失。

Undefined symbols for architecture armv7:

构建输出显示许多链接问题(仅显示少数几个)

  "_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)

首先,我认为绑定只是一个错误。所以我重建了绑定。没有快乐。因此,为了测试理论,我尝试使用github提供的RedLaser单声道绑定。这也提供了相同的错误。 (如果从makefile中删除了-unsafe)。

我需要绑定的库的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

我已经阅读了很多其他问题但没有任何帮助解决这个问题,任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

您没有说明任何版本号(iOS,Xcode,MonoTouch ......),因此要给出具体/明确的答案有点难。

当您将项目更新到iOS6 / Xcode 4.5并删除对ARMv6的支持时,可能会发生这种情况。如果您的本机库只包含ARMv6,那么它们(本机库,而不是绑定项目)将需要为ARMv7重新编译(因为它现在是一个要求)。

要检查这一点,请尝试执行(包括本机库的完整路径):

file libQuickMarkSDK.a

这应该告诉您本机库支持的体系结构。这些需要匹配您在绑定项目中提供的LinkTarget(否则您将从本机链接器中获得错误)。

答案 1 :(得分:0)

你在上一次评论中尝试过poupou的建议吗?我在编译iPhone时遇到了同样的错误,但没有为Simulator编译。我发现LinkWith部分中有许多缺少的框架。为了找出缺少哪些框架,我用谷歌搜索(例如)CVPixelBufferGetWidthOfPlane Framework

这个答案归功于cheeesus:MonoTouch Build: ld: symbol(s) not found for architecture armv7