如何用Cython用extern变量包装C文件

时间:2014-03-15 14:08:35

标签: python c cython

我想用一个Cython的科学家发表一个很长的C函数。我正在关注

http://scipy-lectures.github.io/advanced/interfacing_with_c/interfacing_with_c.html#interfacing-with-c

我可以用numpy支持复制这些例子。

我对在library.cpp中声明为extern的变量做什么(或者根本不做任何事情)感到困惑。显然,我将有一个main.py来调用这个函数,而不是main.cpp。我应该如何声明ini_flagA并传递给func?除了让它们成为函数的参数之外还有其他方法吗?如果可能的话,我宁愿不编辑原始的library.cpp文件。

// main.cpp:
int ini_flag=0, *A;
void main(){
    func(...)
    ...
}

// library.cpp:
extern int ini_flag, *A;
void func(...){
    if (ini_flag==0){
         // malloc and initialize A
         ini_flag=1;
    }

    // use A and do other stuff
}

1 个答案:

答案 0 :(得分:1)

您应该创建相应的library.hpp文件:

int ini_flag, *A;
void func(...)

然后在Cython中:

cdef extern from "library.hpp":
    int ini_flag, *A
    void func(...)

然后你可以在Cython中正常使用它们。