2

Macに次のコマンドを使用してopencvをインストールしました:

$ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2
$ tar xjvf OpenCV-2.4.3.tar.bz2
$ cd OpenCV-2.4.3
$ mkdir build; cd build
$ cmake -G "Unix Makefiles" -D CMAKE_OSX_ARCHITECTURES=i386 -D CMAKE_C_FLAGS=-m32 -D CMAKE_CXX_FLAGS=-m32 ..
$ make -j4
$ sudo make install

次に、インポートして使用しようとしましたが、以下のエラーが発生しました。

~/opencv-2.4.4/build $ python
Python 2.7.3 (default, Mar 28 2013, 14:31:14) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/cv.py", line 3, in <module>
    from cv2.cv import *
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/cv2.so, 2): no suitable image found.  Did find:
    /usr/local/lib/python2.7/site-packages/cv2.so: mach-o, but wrong architecture

アップデート

OpenCV をコンパイルしているときに、以前のバージョン (Apple によってインストールされたもの) から Python ライブラリを取得していることに気付きました。

-- Could NOT find PythonLibs: Found unsuitable version "2.7.2", but required is exact version "2.7.3" (found /usr/lib/libpython2.7.dylib)

--   Python:
--     Interpreter:                 /usr/local/bin/python2 (ver 2.7.3)
--     Libraries:                   /usr/lib/libpython2.7.dylib (ver 2.7.2)
--     numpy:                       /usr/local/lib/python2.7/site-packages/numpy/core/include (ver 1.7.0)
--     packages path:               lib/python2.7/site-packages

これを修正するにはどうすればよいですか?

4

2 に答える 2

1

エラーは、問題が「mach-o、しかし間違ったアーキテクチャ」であることを示しています。これは通常、32 ビット ライブラリを 64 ビット アプリにロードしようとしていること、またはその逆 (または同様に、Intel と PowerPC の場合) を意味します。

インストールした Python に関係なく、32 ビット アプリまたは 64 ビット アプリとして実行できるユニバーサル ビルドを取得した可能性がありますが、既定では 64 ビットとして実行されます。しかし、32 ビット用の OpenCV を明示的にビルドしています。

$ cmake -G "Unix Makefiles" -D CMAKE_OSX_ARCHITECTURES=i386 -D CMAKE_C_FLAGS=-m32 -D CMAKE_CXX_FLAGS=-m32 ..

それが間違いだった場合は、再構築するだけで、それを行わないでください。

32 ビットにしたい場合は、Universal Python を 32 ビット モードで開始するか、32 ビット Python をインストールします。


その間、Homebrew でインストールされた Python 2.7.3 でこれを実行しようとしていますが、Apple のプリインストールされた 2.7.2 に対してビルドしている可能性が高いです (または、さらに悪いことに、部分的に一方的にビルドし、部分的にビルドしています)。別)。

まず、Homebrew を PATH に追加する通常の方法は、で実行されるコマンドには影響しません。そのため、Python を見つけるために何かを実行すると、実行したものとは異なるものを検出する可能性がsudoあります。sudo make installcmakemake

第 2 に、Apple の Python と Homebrew の両方が所有/usr/local/lib/python2.7していると考えている (また、のようなツール/スクリプトをインストールする独占的な権利を持っていると考えている/usr/local/bin/pip-2.7) ため、これがさらに苦痛になります。

于 2013-03-28T20:28:30.613 に答える
0

私の経験から、(debian からの arm-linux-gcc (ulibc) クロスコンパイル)、

Python は dlopen (/usr/lib/python2.7/site-packages/cv2.so) で正しいファイルを読み込もうとしましたが、ファイルが存在するのに「ファイルが見つかりません」というメッセージが表示されました。

私のボード上:

$ python
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: File not found

実際、動的ロードは再帰的に依存するライブラリをロードしようとしていました (もちろん)。ただし、私の場合、libstdc ++は私のボードに埋め込まれていませんでしたが、opencvはそれを必要としていました:

ホスト側:

$ arm-linux-readelf -d ./lib/cv2.so 
Dynamic section at offset 0x24197c contains 23 entries:
Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library: [libpython2.7.so.1.0]
0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED)                     Shared library: [libc.so.0]*

お役に立てば幸いです。

于 2015-12-16T23:59:42.203 に答える