Libsvm-python绑定:mach-o,但架构错误
我正试图在我的mac(OS-X 10.6.8)上安装libsvm。LIbVM为C++安装好(我可以使用SVM训练,SVM预测二进制文件就好了)。按照说明,我在libsvm-3.12/python/文件夹中键入make,并得到以下输出Libsvm-python绑定:mach-o,但架构错误,python,macos,svm,libsvm,mach-o,Python,Macos,Svm,Libsvm,Mach O,我正试图在我的mac(OS-X 10.6.8)上安装libsvm。LIbVM为C++安装好(我可以使用SVM训练,SVM预测二进制文件就好了)。按照说明,我在libsvm-3.12/python/文件夹中键入make,并得到以下输出 <i> make -C .. lib if [ "Darwin" = "Darwin" ]; then \ SHARED_LIB_FLAG="-dynamiclib -W1,-install_name,libsvm.so.2"; \
<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>
make-C。。解放党
如果[“达尔文”=“达尔文”];然后\
SHARED_LIB_FLAG=“-dynamiclib-W1,-install_name,libsvm.so.2”\
否则\
SHARED_LIB_FLAG=“-SHARED-W1,-soname,libsvm.so.2”\
fi\
g++${SHARED_LIB_FLAG}svm.o-o libsvm.so.2
但当我尝试通过“importsvmutil”在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>
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“svmutil.py”,第3行,在
从svm导入*
文件“svm.py”,第19行,在
“../libsvm.so.2”)
文件“/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/ctypes/_init__.py”,第353行,在_init中__
self.\u handle=\u dlopen(self.\u名称,模式)
OSError:dlopen(../libsvm.so.2,6):未找到合适的映像。确实发现:
../libsvm.so.2:mach-o,但架构错误
我不知道如何避开这个错误。我也尝试过为g++使用-m64和-arch x86_64标志进行编译(在libsvm的“Make”过程中),但仍然会出现此错误。有人能告诉我如何避开这个问题吗?尝试将
libsvm
构建为通用二进制文件:
make CFLAGS='-arch i386 -arch x86_64' CXXFLAGS='-arch i386 -arch x86_64' LDFLAGS='-arch i386 -arch x86_64'
或者,确保您运行的是合适版本的Python(请查看Python解释器的标题)。您的Python是32位还是64位?谢谢您的回复。我刚弄明白问题是什么。我的默认python被切换到32位(我安装了Enthough的scipy/numpy包,在此期间它将我的python版本更改为32位)。当我尝试/usr/bin/python2.6-c“import svmutil”时,它工作得非常好(/usr/bin/python2.6是64位python)。这是python 32位对python 64位的问题。