0

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

MT5202 本机链接失败错误。

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

架构 armv7 的未定义符号:

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

  “_CVPixelBufferGetPixelFormatType”,引用自:
      -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] 在 libQuickMarkSDK.a(DecodePickerController.o)
      -[QMImageUtil saveToAlbum:] 在 libQuickMarkSDK.a(QMImageUtil.o)
  “_CVPixelBufferGetPlaneCount”,引用自:
      +[QMImageUtil imageBufferSave:f:] 在 libQuickMarkSDK.a(QMImageUtil.o)
      +[QMImageUtil imageBuffer:zoom:w:h:f:] 在 libQuickMarkSDK.a(QMImageUtil.o)
  “_CVPixelBufferGetWidth”,引用自:
      -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] 在 libQuickMarkSDK.a(DecodePickerController.o)
      -[QMImageUtil saveToAlbum:] 在 libQuickMarkSDK.a(QMImageUtil.o)
  “_CVPixelBufferGetWidthOfPlane”,引用自:
      +[QMImageUtil imageBufferSave:f:] 在 libQuickMarkSDK.a(QMImageUtil.o)
  “_CVPixelBufferLockBaseAddress”,引用自:
      -[DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] 在 libQuickMarkSDK.a(DecodePickerController.o)
  “_OBJC_CLASS_$_AVCaptureDevice”,引用自:
      libQuickMarkSDK.a(QuickMarkCameraUtil.o) 中的 objc-class-ref
  “_OBJC_CLASS_$_AVCaptureDeviceInput”,引用自:
      libQuickMarkSDK.a(QuickMarkCameraUtil.o) 中的 objc-class-ref

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

我需要绑定的库的 linkwith 语句是

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

并且正在使用的 Monotouch 添加标志是

-cxx

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

4

2 回答 2

0

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

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

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

file libQuickMarkSDK.a

这应该告诉您本机库支持的架构。这些需要与LinkTarget您在绑定项目中提供的内容相匹配(否则您将从本机链接器收到错误)。

于 2012-12-20T13:06:44.993 回答
0

你在他最后的评论中尝试过 poupou 的建议吗?为 iPhone 编译时遇到了同样的错误,但为模拟器编译时没有。我发现它是 LinkWith 部分中缺少的一些框架。为了弄清楚缺少哪些框架,我用谷歌搜索了(例如)CVPixelBufferGetWidthOfPlane Framework

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

于 2013-01-05T16:49:50.663 回答