0

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

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

你好.h:

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

你好ç:

#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”

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

谢谢

4

1 回答 1

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 目录中。然后我运行 sage 并启动程序

load cpy.spyx

没有其他步骤。

于 2011-06-16T17:59:05.733 回答