Cython: вызов функции из внешнего файла C - PullRequest
7 голосов
/ 23 декабря 2010

После Cython "Hello World" и примера вызова функции в математических библиотеках C here , я действительно хочу иметь собственный код C в отдельном файле и использовать егос Cython.Следуя this , я изменяю файл setup.py:

sourcefiles = ['hello2_caller.pyx', 'hello2.c']

Это hello2.c (main просто для того, чтобы скомпилировать и протестировать его отдельно - хотя этот продукт не 't для теста:

#import <stdio.h>

void f() {
    printf("%s", "Hello world!\n");
}

int main(int argc, const char* argv[]) {
    f();
    return 0;
}

Это hello2_caller.pyx

cdef extern from "hello2.c":
    void f()

cpdef myf():
    f()

Я получаю:

In file included from hello2_caller.c:219:
hello2.c:3: warning: function declaration isn’t a prototype

Итак, я не могу предоставитьзаголовок каким-то образом ... хотя просто подача setup.py стандартного заголовка, такого как 'hello2.h', не работает. Можете ли вы указать мне рабочий пример или объяснить, что я делаю неправильно. Спасибо.

1 Ответ

5 голосов
/ 24 декабря 2010

Благодаря помощи из списка пользователей Cython здесь .
Моя рецензия здесь .

Итог: это только предупреждение, которое не фиксируется объявлением f (), но скомпилированное .so работает. Я до сих пор не уверен, как вы предоставите .h файл в Cython или есть ли лучший способ сделать это.

И есть пара ошибок: должно быть #include и не указывать файл .c в sourcfiles.

...