Python 使用visualc+;从c调用cython generated.c+;
我一直在尝试按照中概述的示例使用c中的cython声明,具体如下:“通过使用public关键字声明,可以使链接到该模块的c代码可以访问cython模块中定义的c类型、变量和函数:” integrate.pyx:Python 使用visualc+;从c调用cython generated.c+;,python,c,cython,Python,C,Cython,我一直在尝试按照中概述的示例使用c中的cython声明,具体如下:“通过使用public关键字声明,可以使链接到该模块的c代码可以访问cython模块中定义的c类型、变量和函数:” 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,
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\u ext--inplace--compiler=msvc构建.c、.pyd、.h、.obj、.lib、.exp之后,我能够成功地从python导入并运行integrate.g()
。然而,我的新目标是从VS2015的开发者命令提示符调用f(double x)
和integrate\u 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();
}
我不明白当cython成功地创建了一个.obj和一个importable.pyd时,integrate.c怎么会出现语法错误C不是C++不是C!不要使用C++编译器编译C代码。我知道C不是C++…请从开发人员命令提示符上编译C。那么,为什么要添加C++标签作为一个C问题呢?当你准备好提供答案时,请告诉我这是有用的……1)它是相关的。您应该知道是否添加了语言标记。2) 实际上,msvc++有一个标签;无需添加语言标记。3) 你的态度真好!你是否看过代码<>代码集成?h < /Cord>?c不是C++不是C!不要使用C++编译器编译C代码。我知道C不是C++…请从开发人员命令提示符上编译C。那么,为什么要添加C++标签作为一个C问题呢?当你准备好提供答案时,请告诉我这是有用的……1)它是相关的。您应该知道是否添加了语言标记。2) 实际上,msvc++有一个标签;无需添加语言标记。3) 你的态度真好!您是否查看了integrate.h
中的代码?
...\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>'