从C Windowsx64调用Cython函数

时间:2014-07-28 07:25:22

标签: python c gcc cython public

经过长时间的搜索没有任何结果,我需要一些帮助。

我正在尝试调用C语言的Cython函数。 我有以下代码:

print.pyx

cdef public int grail(int i, int a): # public function declaration
    return (i+a)

modul.c

#include <Python.h>
#include "print.h"
#include <stdio.h>
void main(void) {
    int a;

    Py_Initialize();
    initprint();
    a = grail(2,3);
    printf("%i\n", a);
    Py_Finalize();
}

我尝试了两种方法来编译和链接它,我总是通过链接它失败。

首先使用命令行:

cython print.pyx
gcc -LD:\Anaconda\libs -ID:\Anaconda\include -o print.exe print.c modul.c -lpython27 -g

其次是 setup.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("print", ["print.pyx", "modul.c"])]
)

然后在命令行:

python setup.py build_ext --inplace

在这两种情况下我都得到了同样的错误:

build\temp.win32-2.7\Release\modul.o:modul.c:(.text+0x2a): undefined reference t
o `__imp__grail'

以下是有关我的系统的一些其他信息:

Python 2.7.7 :: Anaconda 2.0.1(32位)

gcc(GCC)4.7.0 20111219

Cython版本0.20.1

Windows 7 Enterprise x64

我希望有人知道我如何解决问题,但非常感谢你的帮助。

祝你好运

1 个答案:

答案 0 :(得分:0)

如果我是你,我会从CFFI开始,而不是手动编写:

http://eli.thegreenplace.net/2013/03/09/python-ffi-with-ctypes-and-cffi

我不确定它在Windows上的效果如何(它在我的Linux上完美运行)。它可能会起作用,因为CFFI项目声称关于windows:

http://cffi.readthedocs.org/en/release-0.8/#windows-64