经过长时间的搜索没有任何结果,我需要一些帮助。
我正在尝试调用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
我希望有人知道我如何解决问题,但非常感谢你的帮助。
祝你好运
答案 0 :(得分:0)
如果我是你,我会从CFFI开始,而不是手动编写:
http://eli.thegreenplace.net/2013/03/09/python-ffi-with-ctypes-and-cffi
我不确定它在Windows上的效果如何(它在我的Linux上完美运行)。它可能会起作用,因为CFFI项目声称关于windows: