OpenCv(Leopard)中的“mach-o,但错误的架构”

时间:2012-05-20 16:47:58

标签: python opencv

我已经使用CMake从这个doc安装了OpenCV。 我的〜/ .profile文件是:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
export ARCHFLAGS="-arch i386 -arch x86_64"
export ARCHFLAGS="-arch i386" 
export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PYTHONPATH=/Library/Python/2.6/site-packages:$PYTHONPATH    
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

import cv我有这个错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/site-packages/cv.py", line 1, in <module>
    from cv2.cv import *
ImportError: dlopen(/usr/local/lib/python2.6/site-packages/cv2.so, 2): no suitable image found.  Did find:
    /usr/local/lib/python2.6/site-packages/cv2.so: mach-o, but wrong architecture

我的python架构:

file "$( "$(which python)" -c "import sys;print(sys.executable)" )"
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc

我已经在stackoverflow中阅读并运行了有关OpenCV和Leopard的所有答案,但仍然高于错误。 任何有关这方面的帮助将不胜感激。

提前致谢

1 个答案:

答案 0 :(得分:3)

Leopard(和雪豹)是一个杂交品种,它包含两个二进制文件:32位和64位......它们将它们混合起来......这是一场噩梦。据我所知,你不能在同一个运行程序中混合32位和64位库。

我使用过这个黑客:How to force /usr/bin/gcc -> /usr/bin/gcc -m32?

它使一切都在i386中编译(3月32位)。您也可以将其强制为64(不推荐)。它也修复了许多其他编译问题。 请记住,这是一个黑客攻击。

备份/ usr / bin /,执行hack,编译打开cv并删除hack。

其他解决方案是升级到Lion(目前为止)似乎没有32/64位问题。

有用的命令也是:

lipo -info /usr/local/lib/python2.6/site-packages/cv2.so
arch -i386 /usr/bin/python

Lipo检查共享对象和后者How do I force Python to be 32-bit on Snow Leopard and other 32-bit/64-bit questions的架构。也许你可以通过强制python到与cv2相同的拱来解决这个问题......

修改

我注意到你正在使用macport cv2和apple python。运行代码时尝试/opt/local/bin/python2.6