使用visual c ++从c调用cython生成.c

时间:2015-07-23 17:57:56

标签: python c cython

我一直在尝试按照http://docs.cython.org/src/userguide/external_C_code.html中概述的示例来使用来自c的cython声明,特别是:"你可以使C语言中定义的C类型,变量和函数可以被C代码访问通过使用public关键字声明它们与模块链接:"

integrate.pyx:

cdef public double f(double x):
    return x**2-x

cdef public double integrate_f(double a, double b, int N):
    cdef int i
    cdef double s, dx
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx

def g(a, b, N):
    return integrate_f(a, b, N)

在使用python.exe setup.py build_ext --inplace --compiler=msvc构建.c,.pyd,.h,.obj,.lib,.exp之后,我能够从python成功导入并运行integrate.g()。但是,我的新目标是从VS2015的开发人员命令提示符中调用f(double x)integrate_f(double a, double b, int N)

按照上面链接的说明,我创建了一个integrate_main.c文件:

#include <Python.h>
#include "integrate.h"
#include <stdio.h>

double f() {
    Py_Initialize();
    initintegrate();
    double x = 3;
    Py_Finalize();
    return f(x);
}

double main()
{
printf("%d", f());
return f();
}

现在,integration_main.c,integrate.c,integrate.pyd,integrate.h,integrate.obj,integrate.lib,integrate.exp就位于同一目录下。我尝试使用cl integrate_main.c编译integrate_main.c但是得到以下语法错误:

...\integrate.h(15): error C2061: syntax error: identifier 'f'
...\integrate.h(15): error C2059: syntax error: ';'
...\integrate.h(15): error C2059: syntax error: '<parameter-list>'
...\integrate.h(16): error C2061: syntax error: identifier 'integrate_f'
...\integrate.h(16): error C2059: syntax error: ';'
...\integrate.h(16): error C2059: syntax error: '<parameter-list>'

当cython成功创建.obj和可导入的.pyd时,我不明白integ.c中存在语法错误。

0 个答案:

没有答案