我在python中有一个代码,想与它一起使用swig,所以我在linux上键入了以下几行:
1. swig -python Olympics.i
2. gcc -std=c99 -fPIC -c Olympics_wrap.c -I/usr/local/include/python3.6m
3. ld -shared Olympics.o Olympics_wrap.o -L/usr/local/include/python3.6m/ -o _Olympics.so
并得到一个名为Olympics.py的文件,我将仅复制到了我的项目并编写了import Olympics,但是我遇到了_Opympics.so丢失的错误,所以我添加了它,但现在我得到了:
Traceback (most recent call last):
File "/../Olympics.py", line 1, in <module>
import Olympics.py
File "/../Olympics.py", line 26, in <module>
_Olympics = swig_import_helper()
File "/../Olympics.py", line 22, in swig_import_helper
_mod = imp.load_module('_Olympics', fp, pathname, description)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/imp.py", line 243, in load_module
return load_dynamic(name, filename, file)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/imp.py", line 343, in load_dynamic
return _load(spec)
ImportError: dlopen(../_Olympics.so, 2): no suitable image found. Did find:
../_Olympics.so: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00
../_Olympics.so: stat() failed with errno=25
我做错了什么?
答案 0 :(得分:0)
通常在未正确编译/缠绕时发生。 我不确定这是否行得通,但是我个人使用distutil取得了更大的成功。
进行setup.py python代码。
# setup.py
from distutils.core import setup, Extension
module = Extension('_Olympics', sources['Olympics.c','Olympics.i'])
setup(name='Olympics', ext_modules=[module], py_modules=["Olympics"])
然后转到终端,从cd转到包含Olympics文件的目录。在这里,您可以在一行中进行全面编译并将其编译:
python setup.py build_ext --inplace
在生成.py和.so之后,请首先在python中检查是否可以将模块导入同一目录中。如果成功,则应该能够将Olympics.py和Olympics.so移至要导入此模块的另一个目录。