我正在努力让Cython运行,我想我差不多了,但遇到了一个我不明白的障碍。我可以用一个参数编译函数,但不能用多个参数编译。我有这个问题与python 3.3,但不是2.7。
我成功编译并运行了“hello world”和fibonacci示例,但是当我尝试使用两个或更多输入参数编译任何内容时,编译时会出错。
将其简化为一个非常简单的案例。这将编译,导入到python,然后运行。
def cycheckadd(c):
b = 1
d = b + c
return d
这不是。
def cycheckadd(b,c):
d = b + c
return d
构建时返回以下错误。
C:\Users\Chris\PycharmProjects\CythonTest>python setup.py build_ext --inplace
Compiling cycheck.pyx because it changed.
Cythonizing cycheck.pyx
running build_ext
building 'cycheck' extension
creating build
creating build\temp.win32-3.3
creating build\temp.win32-3.3\Release
c:\mingw\bin\gcc.exe -mdll -O -Wall -IC:\WinPython-32bit-3.3.5.9\python-3.3.5\include -IC:\WinPython-32bit-3.3.5.9\python-3.3.5\include -c cycheck.c -o build\temp.win32-3.3\Release\
cycheck.o
writing build\temp.win32-3.3\Release\cycheck.def
creating build\lib.win32-3.3
c:\mingw\bin\gcc.exe -shared -s build\temp.win32-3.3\Release\cycheck.o build\temp.win32-3.3\Release\cycheck.def -LC:\WinPython-32bit-3.3.5.9\python-3.3.5\libs -LC:\WinPython-32bit-3
.3.5.9\python-3.3.5\PCbuild -lpython33 -lmsvcr100 -o build\lib.win32-3.3\cycheck.pyd
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmsvcrt.a(dupvs00137.o):(.idata$5+0x0): multiple definition of `_imp___assert'
C:\WinPython-32bit-3.3.5.9\python-3.3.5\libs/libmsvcr100.a(dqcgs00457.o):(.idata$5+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
使用下面的setup.py文件编译。
from setuptools import setup
from Cython.Build import cythonize
setup(
name = 'cython math check',
ext_modules = cythonize("cycheck.pyx"),
)
使用python 3.3和cython 0.22生成此结果。我使用2.7时没有这个问题。
编译器是MinGW。我一直在Windows 10-64bit上使用32位版本的Python。我已将以下配置文件添加到python目录。
C:\ WinPython-32位-3.3.5.9 \蟒-3.3.5 \ LIB \的distutils \ distutils.cfg
[build]
compiler = mingw32
[build_ext]
compiler = mingw32
非常感谢任何帮助!
谢谢, 克里斯