cython的setup.py生成.o而非.dll

1 投票
2 回答
1492 浏览
提问于 2025-04-16 13:38

我刚接触cython,所以如果我漏掉了什么明显的东西,请多多包涵。我正在尝试构建可以在Python中使用的C扩展,以提高性能。我有一个名为fc.py的模块,里面有很多函数,我想通过cython生成一个.dll文件,使用dsutils,并在win64上运行:

c:\python26\python c:\cythontest\setup.py build_ext --inplace

我在C:\Python26\Lib\distutils目录下有一个dsutils.cfg文件。根据要求,disutils.cfg文件包含以下配置设置:

[build]
compiler = mingw32

我的startup.py文件看起来是这样的:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension('fc', [r'C:\cythonTest\fc.pyx'])]

setup(
  name = 'FC Extensions',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

这是命令行输出的内容:

C:\python26\python C:\cythontest\setup.py build_ext --inplace
running build_ext
cythoning C:\cythonTest\fc.pyx to C:\cythonTest\fc.c
building 'FC' extension
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -Ic:\python26\include -Ic:\pytho
n26\PC -c C:\cythonTest\fc.c -o c:\cythontest\fc.o

我有最新版本的mingw,用于amdwin64类型的构建。我也有适用于win64的Python 2.6的最新版本cython。Cython确实给我生成了一个fc.c文件,没有错误,只有一些关于类型转换的警告,我会在搞定后处理这些警告。此外,它还生成了fc.def和fc.o文件,而不是.dll文件。我没有遇到错误。我在一些讨论中看到,它应该会根据需要自动创建.so或.dll文件,但这并没有发生。

2 个回答

0

你试过用

python setup.py build --compiler=mingw32

来编译它吗?

1

最后,我成功为win64构建了扩展。显然,如果你有VC 2010 Express版本,你可以调整一些设置,让它使用msvc9编译器来编译模块。具体的细节可以在这里找到。非常感谢nukeitdotorg的朋友们提供这些信息,还有J.F. Sebastian给我的建议。

撰写回答