Я хочу обернуть библиотеку следующим заголовочным файлом:
#include "rbtree.h"
struct interval_tree_node {
struct rb_node rb;
unsigned long start; /* Start of interval */
unsigned long last; /* Last location _in_ interval */
unsigned long __subtree_last;
};
extern void
interval_tree_insert(struct interval_tree_node *node, struct rb_root *root);
extern void
interval_tree_remove(struct interval_tree_node *node, struct rb_root *root);
extern struct interval_tree_node *
interval_tree_iter_first(struct rb_root *root,
unsigned long start, unsigned long last);
extern struct interval_tree_node *
interval_tree_iter_next(struct interval_tree_node *node,
unsigned long start, unsigned long last);
Это мой интервал дерева.pxd:
cdef extern from "src/intervaltree.h":
struct interval_tree_node:
struct rb_node
void interval_tree_insert(struct interval_tree_node *node, struct rb_root *root)
void interval_tree_remove(struct interval_tree_node *node, struct rb_root *root)
struct interval_tree_node * interval_tree_iter_first(struct rb_root *root, unsigned long start, unsigned long last)
struct interval_tree_node * interval_tree_iter_next(struct interval_tree_node *node, unsigned long start, unsigned long last)
А вот мой setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
setup(
ext_modules = cythonize([Extension("intervaltree", ["intervaltree.pyx"])])
)
Мой intervaltree.pyx
просто пуст, или
cimport intervaltree
Когда я запускаю python setup.py install
, я получаю следующую ошибку:
Error compiling Cython file:
------------------------------------------------------------
...
cdef extern from "src/intervaltree.h":
struct interval_tree_node:
struct rb_node
void interval_tree_insert(struct interval_tree_node *node, struct rb_root *root)
^
------------------------------------------------------------
intervaltree.pxd:6:56: Expected ')', found '*'
Так как примеры в документации Определение внешних объявлений Использование синтаксиса
int queue_push_head(Queue* queue, QueueValue data)
не
int queue_push_head(Queue *queue, QueueValue data)
Я пытался изменить эту часть, но, похоже, это не помогло. Что я делаю неправильно?