0

私はこの問題を何日も抱えていて、前進することができませんでした. MonoTouch バインディング プロジェクトを使用してバインドしようとしているネイティブの Obj-C ライブラリがあります。バインディング Dll が作成されますが、それをアプリにインポートしてコンパイルしようとすると、

MT5202 ネイティブ リンク失敗エラー。

ビルド出力を読むと、コンパイルしている iOS バージョンのシンボルが欠落していることがわかります。

アーキテクチャー armv7 の未定義シンボル:

ビルド出力には多くのリンクの問題が示されています (一部のみを示しています)。

  「_CVPixelBufferGetPixelFormatType」、次から参照:
      - [DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] libQuickMarkSDK.a(DecodePickerController.o) 内
      -libQuickMarkSDK.a(QMImageUtil.o)の[QMImageUtil saveToAlbum:]
  「_CVPixelBufferGetPlaneCount」、次から参照:
      +[QMImageUtil imageBufferSave:f:] in libQuickMarkSDK.a(QMImageUtil.o)
      +[QMImageUtil imageBuffer:zoom:w:h:f:] in libQuickMarkSDK.a(QMImageUtil.o)
  「_CVPixelBufferGetWidth」、次から参照:
      - [DecodePickerController captureOutput:didOutputSampleBuffer:fromConnection:] libQuickMarkSDK.a(DecodePickerController.o) 内
      -libQuickMarkSDK.a(QMImageUtil.o)の[QMImageUtil saveToAlbum:]
  「_CVPixelBufferGetWidthOfPlane」、次から参照:
      +[QMImageUtil imageBufferSave:f:] in 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 mono バインディングを使用しようとしました。これも同じエラーを提供しました。(メイクファイルから -unsafe が削除された場合)。

バインドする必要があるライブラリの linkwith ステートメントは

アセンブリ: LinkWith ("libQuickMarkSDK.a", LinkTarget.ArmV7, ForceLoad = true, フレームワーク = "AVFoundation CFNetwork CoreMedia CoreVideo libz.1.2.5.dylib MobileCoreServices QuartzCore Foundation SystemConfiguration")]

使用されているモノタッチ追加フラグは

-cxx

私は他の多くの問題を読みましたが、問題を解決するのに役立つものは何もありませんでした。

4

2 に答える 2

0

前回のコメントで poupou の提案を試してみましたか? iPhone用にコンパイルしたときに同じエラーが発生しましたが、シミュレーター用にはありませんでした。LinkWith セクションで欠落しているフレームワークが多数あることがわかりました。どのフレームワークが欠落しているかを調べるために、(たとえば)グーグルで検索しましたCVPixelBufferGetWidthOfPlane Framework

この回答の功績は cheeesus に送られます: MonoTouch Build: ld: symbol(s) not found for architecture armv7

于 2013-01-05T16:49:50.663 に答える
0

バージョン番号 (iOS、Xcode、MonoTouch など) を明記していないため、具体的/決定的な答えを出すのは少し難しいです。

この状況は、ARMv6 のサポートが削除された iOS6 / Xcode 4.5 にプロジェクトを更新したときに発生する可能性があります。ネイティブ ライブラリに ARMv6 のみが含まれている場合は、それら (バインド プロジェクトではなくネイティブ ライブラリ) を ARMv7 用に再コンパイルする必要があります (現在は必須であるため)。

これを確認するには、次のことを試してください (ネイティブ ライブラリへのフル パスを含めます)。

file libQuickMarkSDK.a

これにより、ネイティブ ライブラリがサポートするアーキテクチャがわかります。これらは、バインディング プロジェクトで提供するものと一致する必要がありLinkTargetます (そうしないと、ネイティブ リンカーからエラーが発生します)。

于 2012-12-20T13:06:44.993 に答える