我正在尝试使用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文件没有被复制到上面的临时目录中。
由于
答案 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
没有其他步骤。