Cython ссылки на пользовательский код C - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь использовать sage для запуска основной программы на Cython, которая использует собственную библиотеку C.

У меня есть три файла: 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 / ...: неопределенный символ: chello Это моя первая попытка использования Cython, поэтому у меня может быть глупая ошибка в моем коде. Альтернативная теория заключается в том, что файл .h не копируется во временный каталог выше.

Спасибо

1 Ответ

1 голос
/ 16 июня 2011

Наконец нашел решение здесь: 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. Это хороший пример программы Hello World для Cython, использующей Sage.

Я поместил все три файла (.c, .h и .spyx) в каталог / home / sage / sage. Затем я запустил sage и запустил программу с

load cpy.spyx

Других шагов нет.

...