17

私はopenCVフレームワークを使用してiphoneアプリケーションに取り組んでいます。すべてが正常に機能していました。ただし、最近iOS6とXCode4.5のリリースで、プロジェクトをXCode4.5に移行していました。ビルド中に次のエラーが発生しました。

ld:ファイルはユニバーサル(2スライス)ですが、(n)armv7sスライスが含まれていません:/Users/jobs/iPhone_Client/workspace/MyProject/third-party/OpenCV.framework/OpenCV for Architecture armv7s clang:エラー:リンカーコマンドが失敗しました終了コード1を使用(呼び出しを確認するには-vを使用)

**ビルドに失敗しました**

次のビルドコマンドが失敗しました:Ld build / MyProject.build / Debug-iphoneos / MyProject.build / Objects-normal / armv7s / MyProject normal armv7s(1つの失敗)

私が理解したように、これは新しいarmv7sアーキテクチャによるものです。OpenCVは明らかにarmv7sでコンパイルされていません。

この問題を解決するにはどうすればよいですか?

armv7sアーキテクチャと互換性のあるフレームワークの新しいリリースはどこにありますか?

また、互換性のあるフレームワークが利用できない場合、ソースコードを取得して、新しいアーキテクチャに対してコンパイルされた独自のライブラリを作成する方法はありますか?多分それを行う方法のいくつかの簡単なステップ?

注:armv7ではなくarmv7のビルドが必要であることに注意してください。ありがとうございました

4

7 に答える 7

15

この答えは、n9986によって与えられたものに基づいています。彼が提案したように、私はで見つかったリポジトリのクローンを作成しました

https://github.com/jonmarimba/OpenCV-iOS

私がそれをダウンロードしたとき、プロジェクト内のさまざまなライブラリへのいくつかの参照が壊れていました。これは奇妙なことでしたが、修正は簡単でした。それらが修正された後、それはn9986が説明したように正確に動作し、armv7とarmv7sの両方用にコンパイルされたライブラリを出力しました。ただし、私の目的では、使用していた古い.frameworkの代わりにドロップできるように、それらを.frameworkにバンドルする必要がありました。

以前、私はiOS用のOpencvの最新バージョンをここにダウンロードし、armv7sをサポートしてコンパイルするようにcmakeファイルを変更するのにかなりの時間を費やしました。jonmarimbaはすでにxcodeプロジェクトファイルを再構築して、cmakeの依存関係を取り除き、ターゲットアーキテクチャの変更をより直感的にしています。残念ながら、彼は標準のopenCVビルドに付属するほど多くのライブラリをビルドしていません。フレームワークに変換するための標準のopenCVリリースで使用されるターゲットであるopencv_worldのjonmarimbaのプロジェクトに新しいターゲットを追加しました。それが構築されたら、標準のopenCVリリースによって生成されたフレームワークファイル構造の静的ライブラリの代わりにそれを使用しました。

私が作成したフレームワークは、ここからダウンロードできます。以前のopencv2.frameworkの代わりとして、これは私にとって完璧に機能します。ただし、jonmarimbaがopencv_videostab、opencv_stitching、またはopencv_nonfreeのターゲットを変換していないことに気づきました。これらのライブラリの1つを使用すると、私のフレームワークが機能しない可能性があります。その場合はお知らせください。xcodeプロジェクトのターゲットとして設定を試みることができます。

アップデート

他のアーキテクチャ用にコンパイルするには、含まれているxcodeプロジェクトのターゲットアーキテクチャをopencv_worldライブラリに適したものに変更します。ビルドしたら、ビルドしたばかりのライブラリを探します。opencv_worldライブラリの名前をopencv2に変更し、.frameworkにあるライブラリファイルをopencv_worldに置き換えます。

Update2

OpenCV 2.4.3は、デフォルトでarmv7sサポートを使用してコンパイルされるようになったため、これらのソリューションは古くなっています。

于 2012-09-25T23:19:11.763 に答える
7

opencvのXcodeプロジェクトのクローンを作成し、READMEに従ってopencvgitサブモジュールを更新します。

https://github.com/jonmarimba/OpenCV-iOS

ビルド設定を確認し、iOS6とarmv7が存在することを確認します。[ビルド]をクリックします。これで、armv7s互換の.aファイルができました。私はこれを試しました:

$ file libopencv_core.a 
libopencv_core.a: Mach-O universal binary with 2 architectures
libopencv_core.a (for architecture armv7):  current ar archive random library
libopencv_core.a (for architecture cputype (12) cpusubtype (11)):   current ar archive random library

これまでの私の調査によると、最後のエントリはarmv7s用です。

編集:最後のエントリは確かにarmv7sです。Xcode独自のlipoinfoコマンドを実行しました。

$ xcrun -sdk iphoneos lipo -info libopencv_core.a 
Architectures in the fat file: libopencv_core.a are: armv7 armv7s 
于 2012-09-22T05:28:54.843 に答える
1

常にarmv7をターゲットにすることはできず、armv7のみをターゲットにすることができます。アプリケーションはiPhone5でも正常に動作しますが、新しい命令セット用に完全に最適化されているわけではありません。

于 2012-09-19T14:36:35.700 に答える
1

簡単に言うと、ここからソースのクローンを作成し、このチュートリアルでビルドします。

次に、armv7、armv7s、およびシミュレーターで動作するopencv2.framewokを入手しました。

于 2012-10-02T06:25:30.470 に答える
0

明らかなことですが、ライブラリopenCV.frameworkを再コンパイルして再構築し、armv7sをターゲットにする必要があります。

再構築する前に、ライブラリの「プロジェクト設定」と「ターゲット設定」を調整してください。幸運を!

于 2012-09-21T10:04:50.273 に答える
0

おそらくCMakeでそれを構築することは可能です。1年前、iOS用に構築したい医学図書館に問題がありました。私はCMakeでそれを処理することができました。

おそらく、このリンクはスターターになる可能性があります。

http://computer-vision-talks.com/2010/12/building-opencv-for-ios/

幸運を!

于 2012-09-21T10:49:25.150 に答える
0

-DCMAKE_OSX_ARCHITECTURES="armv6;armv7;armv7s;i386"iOS用のOpenCVライブラリ/フレームワークをコンパイルするときにcmakeに渡します。

于 2012-09-22T11:03:36.360 に答える