2

動作中のデモから OpenCV フレームワークを使用している私のプロジェクトでは、ここでちょっとしたことがありません。

再現する手順:

  1. サンプル アプリをhttp://aptogo.co.uk/2011/09/opencv-framework-for-ios/からダウンロードします。

  2. titanium create --platform=iphone --type=module --dir= で新しい Titainum iOS モジュールを作成します。--name=opencv --id=opencv

  3. XCode プロジェクトを開き、FaceTracker アプリから OpenCV フレームワークとその他の必要なフレームワークをドラッグします。

  4. OTHER_LDFLAGS=$(inherited) -framework OpenCV を module.xcconfig に追加

  5. OpencvView および OpencvViewProxy という名前の新しい TiUIView および TiUIViewProxy クラスを作成します。

  6. 新しい OpencvView クラスで、OpenCV を使用する UIViewController をインスタンス化します。

ビルドによって Titanium モジュールがビルドされますが、モジュール テスト ハーネスを実行しようとすると、OpenCV オブジェクトで次のエラーが発生します。

アーキテクチャ i386 の未定義シンボル: "_CMSampleBufferGetImageBuffer"、参照元: -[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] 内 libopencv.a(VideoCaptureViewController.o) "_CMSampleBufferGetOutputPresentationTimeStamp"、参照元: -[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] libopencv.a(VideoCaptureViewController.o) "_CMTimeMake" から参照: -[VideoCaptureViewController createCaptureSessionForCamera:qualityPreset:grayscale:] libopencv.a(VideoCaptureViewController.o) の "_CVPixelBufferGetBaseAddress" から参照: -[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection: ] in libopencv.a(VideoCaptureViewController.o) "_CVPixelBufferGetBaseAddressOfPlane" から参照: -libopencv.a(VideoCaptureViewController.o) の [VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] ) "_CVPixelBufferGetPixelFormatType" から参照: -libopencv.a(VideoCaptureViewController.o) の [VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] .o) "_CVPixelBufferLockBaseAddress"、次から参照:-[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] libopencv.a(VideoCaptureViewController.o) の「_CVPixelBufferUnlockBaseAddress」、次から参照: -[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] libopencv.a(VideoCaptureViewController.o) の「cv::_InputArray」 ::_InputArray(cv::Mat const&)"、参照先: -[DemoVideoCaptureViewController processFrame:videoRect:videoOrientation:] in libopencv.a(DemoVideoCaptureViewController.o) "cv::_OutputArray::_OutputArray(cv::Mat&)", -[DemoVideoCaptureViewController processFrame:videoRect:videoOrientation:] in libopencv.a(DemoVideoCaptureViewController.o) "cv::CascadeClassifier::load(std::string const&)"、次から参照:-libopencv.a(DemoVideoCaptureViewController.o) の [DemoVideoCaptureViewController viewDidLoad] "cv::CascadeClassifier::CascadeClassifier()"、参照先: -libopencv.a(DemoVideoCaptureViewController.o) の [DemoVideoCaptureViewController .cxx_construct] "cv::CascadeClassifier: :~CascadeClassifier()"、参照元: -[DemoVideoCaptureViewController .cxx_destruct] in libopencv.a(DemoVideoCaptureViewController.o) "cv::Mat::deallocate()"、参照元: -[VideoCaptureViewController captureOutput:didOutputSampleBuffer:fromConnection:] libopencv.a(VideoCaptureViewController.o) 内 - libopencv.a(UIImage+OpenCV.o) 内の [UIImage(UIImage_OpenCV) CVMat] - libopencv.a(UIImage+OpenCV.o) 内の [UIImage(UIImage_OpenCV) CVGrayscaleMat] "cv: :Mat::create(int, int const*, int)",参照元: -[UIImage(UIImage_OpenCV) CVMat] in libopencv.a(UIImage+OpenCV.o) -[UIImage(UIImage_OpenCV) CVGrayscaleMat] in libopencv.a(UIImage+OpenCV.o) "cv::flip(cv:: _InputArray const&, cv::_OutputArray const&, int)"、参照先: -[DemoVideoCaptureViewController processFrame:videoRect:videoOrientation:] in libopencv.a(DemoVideoCaptureViewController.o) "cv::resize(cv::_InputArray const&, cv::cv::resize(cv::_InputArray const&, cv::cv::resize(cv::_InputArray const&, cv::OutputArray const&, cv::Size, double, double, int)"、参照元: -[DemoVideoCaptureViewController processFrame:videoRect:videoOrientation:] in libopencv.a(DemoVideoCaptureViewController.o) "cv::fastFree(void*)"、参照元: -[VideoCaptureViewController captureOutput: libopencv.a(VideoCaptureViewController.o) の didOutputSampleBuffer:fromConnection:] - libopencv.a(UIImage+OpenCV.o) の [UIImage(UIImage_OpenCV) CVMat] - libopencv.a(UIImage+OpenCV.o) の [UIImage(UIImage_OpenCV) CVGrayscaleMat] o) "cv::transpose(cv::_InputArray const&, cv::_OutputArray const&)"、以下から参照: -[DemoVideoCaptureViewController processFrame:videoRect:videoOrientation:] libopencv.a(DemoVideoCaptureViewController.o) 内の "_kCVPixelBufferPixelFormatTypeKey"、から参照:-[VideoCaptureViewController createCaptureSessionForCamera:qualityPreset:grayscale:] libopencv.a(VideoCaptureViewController.o) ld: アーキテクチャ i386 のシンボルが見つかりませんでした。clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (-v を使用して呼び出しを確認してください)

4

2 に答える 2

0

Xcode4.5.1のデフォルトのアップルllvmコンパイラでも同様の問題が発生しました。(ビルドオプションから)gccに変更してみて、これが機能するかどうかを確認してください。

于 2012-12-14T18:34:34.037 に答える