【问题标题】:Libsvm python bindings: mach-o, but wrong architectureLibsvm python 绑定:mach-o,但架构错误
【发布时间】:2012-09-16 07:59:28
【问题描述】:

我正在尝试在我的 mac (OS-X 10.6.8) 上安装 libsvm。 Libsvm 可以很好地为 C++ 安装(我可以很好地使用 svm-train、svm-predict 二进制文件)。按照说明,我在 libsvm-3.12/python/ 文件夹中输入 make 并得到以下输出

<i>
make -C .. lib
if [ "Darwin" = "Darwin" ]; then \
        SHARED_LIB_FLAG="-dynamiclib -W1,-install_name,libsvm.so.2"; \
    else \
        SHARED_LIB_FLAG="-shared -W1,-soname,libsvm.so.2"; \
    fi; \
    g++ ${SHARED_LIB_FLAG} svm.o -o libsvm.so.2
</i>

但是当我尝试通过“import svmutil”在 python 中使用它时,出现以下错误

<i> 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "svmutil.py", line 3, in <module>
    from svm import *
  File "svm.py", line 19, in <module>
    '../libsvm.so.2'))
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(../libsvm.so.2, 6): no suitable image found.  Did find:
    ../libsvm.so.2: mach-o, but wrong architecture
</i>

我不知道如何解决这个错误。我也尝试使用 g++ 的 -m64 和 -arch x86_64 标志进行编译(在 libsvm 的“制作”过程中),但我继续收到此错误。谁能告诉我如何解决这个问题?

【问题讨论】:

  • 你的 Python 是 32 位还是 64 位?

标签: python macos svm libsvm mach-o


【解决方案1】:

尝试将libsvm 构建为通用二进制文件:

make CFLAGS='-arch i386 -arch x86_64' CXXFLAGS='-arch i386 -arch x86_64' LDFLAGS='-arch i386 -arch x86_64'

或者,确保您运行的是合适的 Python 版本(查看 Python 解释器的横幅)。

【讨论】:

  • 感谢您的回复。才知道是什么问题。我的默认 python 已切换到 32 位(我安装了 enthought 的 scipy/numpy 包,在此期间它将我的 python 版本更改为 32 位)。当我尝试 /usr/bin/python2.6 -c "import svmutil" 时,它运行良好(/usr/bin/python2.6 是 64 位 python)。
  • 你的猜测是正确的。这是 python 32 位与 python 64 位的问题。
猜你喜欢
  • 2020-05-03
  • 2011-01-17
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多