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 时,我注意到它从以前的版本(苹果安装的一个)中获取了 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, but wrong architecture”。这通常意味着您正在尝试在 64 位应用程序中加载 32 位库,反之亦然(或类似地,对于 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 位的,你可以在 32 位模式下启动一个 Universal python,或者安装一个 32 位的 Python。


同时,您正在尝试使用安装了 Homebrew 的 Python 2.7.3 来运行它,但很有可能您是针对 Apple 预安装的 2.7.2 构建它(或者,更糟糕的是,以一种方式部分地构建它,部分地构建它)其他)。

sudo首先,人们将 Homebrew 添加到他们的 PATH 的通常方式不会影响任何sudo make install使用.cmakemake

其次,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 (uclibc) 交叉编译),

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 回答