Cython链接到自定义C代码

时间:2011-06-15 20:31:43

标签: cython sage

我正在尝试使用sage来运行一个使用自定义C库的基本Cython程序。

我有三个文件:hello.h,hello.c和cpy.spyx。

hello.h:

#include <stdio.h>  
void chello();

的hello.c:

#include "hello.h"  
void chello() {  
  printf("Hello world\n");  
}

cpy.spyx:

#cinclude /home/sage/sage  
cdef extern from "/home/sage/sage/hello.h":  
  void chello()  
def pyhello():  
  chello()

我正在尝试使用(仅)命令在圣人中运行此命令:
加载“cpy.spyx”

我收到以下错误:
导入错误/ home / sage / sage // temp / ...:undefined symbol:chello 这是我第一次尝试Cython,所以我的代码中可能有一个愚蠢的错误。另一种理论是.h文件没有被复制到上面的临时目录中。

由于

1 个答案:

答案 0 :(得分:1)

最后在这里找到了解决方案: http://trac.sagemath.org/sage_trac/ticket/1994

有一些显然是无证的指令。

使用与上面相同的.c和.h文件,我使用了以下.spyx文件:

#clang c  
#cfile hello.c  
#cinclude /home/sage/sage  
cdef extern from "/home/sage/sage/hello.h":  
  void chello()  
def pyhello():
  chello()

请注意上面的链接和我的代码之间的差异:我没有在#之后包含空格,并且我没有在cinclude行中的路径周围添加引号。这是使用Sage的Cython hello world程序的一个很好的例子。

我将所有三个文件(.c,.h和.spyx)放在/ home / sage / sage目录中。然后我跑了圣人并用

启动了程序
load cpy.spyx

没有其他步骤。