5

私のプロジェクトは今朝まで問題なく機能していました。私はxcode 4.3と古いバージョンのOpenCVを使用していました(正確なバージョンはわかりません)。OSX はすでに 10.7.x でしたが、10.7.5 ではありません。

現在、OSX を 10.7.5 に、xcode を 4.5.2 にアップグレードし、OpenCV 2.4.3 をダウンロードした後、プロジェクトをビルドしようとすると、次のリンカ エラーが発生します。

アーキテクチャ armv7 の未定義シンボル:
"_OBJC_CLASS_$_ALAssetsLibrary"、参照元:
opencv2(cap_ios_video_camera.o) の objc-class-ref
"cv::FeatureDetector::create(std::string const&)"、参照元:
-[ImageAnalyzer ImageAnalyzer.o の detectBlobs:]
"cv::FeatureDetector::detect(cv::Mat const&, std::vector >&, cv::Mat const&) const"、次から参照:
-[ImageAnalyzer detectBlobs:] in ImageAnalyzer. o
ld: アーキテクチャー armv7 のシンボルが見つかりませんでし
た。

新しいopencvフレームワークを使用するために、古いフレームワークへの参照を削除し、ここからダウンロードした公式のビルド済みopencv2.frameworkへのプロジェクトを参照しました。また、 libz.dylib
への参照を削除し、代わりにlibc++.dylibへの参照を追加しました。 最後のステップは、プレフィックス ファイルを新しいフレームワークに更新することでした。プレフィックス ファイルの関連部分は次のようになります。

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

それはすべて、私が取り除くことができないように見えるこれらの 4 つのリンカ エラーに絞り込まれました。libstdc++.dylibを使用してみましたが、さらに多くのエラーが発生しています。ここで説明されているように、OpenCV を自分でビルドしようとしましたが、ビルド済みのフレームワークと同じエラーが引き続き発生します。

私は何を取りこぼしたか?プロジェクトで他に変更する必要があるものはありますか?


更新: here
に 見られるように、「C++ 標準ライブラリ」を「libc++ (C++ 11 をサポートする LLVM C++ 標準ライブラリ)」に設定すると、エラーが 1 つだけ発生しました。

clang: エラー: -stdlib=libc++ の配置ターゲットが無効です (iOS 5.0 以降が必要です)

展開ターゲットを iOS 5 に変更すると、プロジェクトが再び実行されるようになりました。
これは、OpenCV 2.4.3 が 5 より古い iOS バージョンでは動作しないということですか?

4

7 に答える 7

6

cmake 2.8.10 および xcode 4.6.1 を使用して、mac os x lion 10.7.5 で c++ opencv 2.4.4 をコンパイルして実行する手順

適切なツールを持つ

  1. http://sourceforge.net/projects/opencvlibrary/files/から opencv-unix をダウンロードし、解凍します。
  2. http://www.cmake.org/cmake/resources/software.htmlから cmake .dmg をダウンロードしてインストールします
  3. 私は、ios SDK 6.1を含むos x lionにxcode 4.6があると仮定しています
  4. xcode 設定に移動して、コマンド ライン ツールをダウンロードしてインストールし、g++ などを使用します。

cmake を使用して opencv をコンパイルする

  1. 抽出されたopencvフォルダーに移動します
  2. ビルド ディレクトリを作成する

    mkdir build
    cd build
    cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" ..
    make -j8
    sudo make install
    
  3. build フォルダーから bin/ に移動し、いずれかのテストを実行します。

    ./opencv_test_stitching
    

独自の c++ opencv xcode プロジェクトを作成する

  1. xcode を起動し、新しい xcode プロジェクトを作成します。
  2. os x の下のプロジェクトのタイプにコマンド ライン ツールを選択します。
  3. プロジェクトのビルド設定を開きます
  4. [アーキテクチャ] で、[アーキテクチャ] を 64 ビット Intel に設定します。また、有効なアーキテクチャを x86_64 に設定します
  5. Build Options の下で、Compiler for C/C++ を Default Compiler に設定します。
  6. 検索パスの下で、ヘッダー検索パスを /usr/local/include に設定します
  7. また、検索パスの下で、ライブラリ検索パスを /usr/local/lib に設定します
  8. Apple LLVM コンパイラ 4.2 の下で - 言語は C++ 標準ライブラリを libstd++ に設定します (OpenCV 2.4.6、Xcode 5、LLVM 5.0、および 10.8.5 の場合は、言語方言と std ライブラリの両方を「libstd++」ではなく「Compiler Default」に設定します)。

コンパイル済みの opencv ライブラリをプロジェクトに追加します

  1. [ビルド設定] タブの横にある [ビルド フェーズ] タブに移動します。
  2. Link Binary With Libraries 内で + 記号をクリックし、Add Other を選択します。
  3. キーボードの先頭のスラッシュ / を押して /usr/local/lib と入力します
  4. Enter キーを押して、プロジェクトで使用するライブラリを選択します
  5. 常に libopencv_core.2.4.4.dylib を選択するようにしてください
  6. Enterキーを押すと、プロジェクトの下に選択したdylibが表示されます

コードを書く

  1. 最初にファイルを整理し、プロジェクト ブループリント アイコンを右クリックして、[新しいグループ] を選択します。
  2. 新しいグループにopencvなどの名前を付けます
  3. dylibs をドラッグしてそのグループにドロップします
  4. main.cpp を開く
  5. opencv に付属のサンプル テストからコードをコピーして、ここに貼り付けます。
  6. 必要なすべての dylib が追加されていることを確認します。たとえば、opencv_test_stitching.cpp コードを main.cpp にコピーした場合、前の手順で次のライブラリを追加する必要があります libopencv_core.2.4.4.dylib libopencv_highgui.2.4.4. dylib libopencv_stitching.2.4.4.dylib

乾杯。

于 2013-03-27T15:37:57.757 に答える
4

プロジェクトにフレームワークAssetsLibraryがないようです。

  1. プロジェクト ナビゲーターで最上位ノードを選択します。(ビルド設定を含むプロジェクトとターゲットのページが表示されます。)

  2. ターゲットを選択します。

  3. [概要]を選択します。

  4. Linked Frameworks and Librariesまで下にスクロールします。

  5. 表の最後にあるプラスアイコンをクリックし、AssetsLibrary.frameworkを選択します。

  6. [追加] をクリックします。

その後、もう一度ビルドしてみてください。

于 2012-12-25T12:41:14.930 に答える
4

バージョンに関する回答が得られないように見えるため (ここでも OpenCV Q&A サイトでも)、少なくとも問題が解決したので、これを回答として投稿します。これについては、こちらで説明しています。

プロジェクトのBuild Settingsで、セクションApple LLVM compiler 4.1-Languageに移動します。
そこで: C++ 言語方言コンパイラのデフォルト
に 設定するC++ 標準ライブラリlibc++ (C++ 11 をサポートする LLVM C++ 標準ライブラリ) に 設定 する上記がサポートされています。


プロジェクトのsummeryで5.0にするとうまくいきました。

最後に、OpenCV 2.4.3 と 5 より古い iOS バージョンとの互換性に関して、それが何を意味するのかはまだわかりません。

于 2012-12-27T11:39:21.047 に答える
1

clang: error: invalid deployment target for -stdlib=libc++ (iOS 5.0 以降が必要) このエラーを削除します。

ビルド設定に移動します。C++ 標準ライブラリをコンパイラの既定値に設定します。エラーは確実に解消されます。

于 2013-03-25T10:36:37.527 に答える
0
  1. Xcode/General/Linked Frameworks and Libraries に移動
  2. 「+」ボタンを押す
  3. タイプ: AssetsLibrary
  4. 「AssetsLibrary.framework」を選択してインポート

終わり

幸運を!

于 2017-06-07T09:33:49.387 に答える
0

公式 Web サイトの opencv インストール ガイドに記載されている端末コマンドを使用する代わりに、次のコマンドを使用して端末から opencv をビルドします。私のために働いた。

CD OpenCV-2.3.1

mkdir ビルド

CDビルド

cmake -G "Unix メイクファイル" ..

作る

sudo make install

于 2014-01-13T07:18:57.203 に答える