私はこの問題を何日も抱えていて、前進することができませんでした. 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
私は他の多くの問題を読みましたが、問題を解決するのに役立つものは何もありませんでした。