Компиляция Python в C с использованием Cython

Я пытаюсь скомпилировать python исходный код foo.py в C, используя cython.

В foo.py:

print "Hello World"

Команда, которую я запускаю, cython foo.py.

Проблема заключается в том, что при компиляции foo.c с использованием gcc я получаю сообщение об ошибке:

undefined reference to 'main'.

Ответ 1

при преобразовании кода из python в c (используя Cython) он преобразует его в c-код, который может быть скомпилирован в общий объект. чтобы сделать его исполняемым, вы должны добавить команду "--embed" в команду преобразования cython. этот флаг добавляет "основную" функцию, которая вам нужна, поэтому вы можете скомпилировать код c в исполняемый файл. обратите внимание, что вам понадобятся библиотеки сценариев python .so для запуска exec.

Ответ 2

Прочтите документацию Cython. Это также (надеюсь) научит вас, что такое Cython, а что нет. Cython предназначен для создания расширений python (а не для общего назначения Python-to-C-компилятор), которые являются общими объектами /dll. Динамически загружаемые библиотеки не имеют функции main, как автономные программы, но компиляторы предполагают, что они в конечном итоге связывают исполняемый файл. Вы должны сказать им иначе через флаги (-shared methinks, но опять же, обратитесь к документации Cython) - или даже лучше, не компилируйте себя, используйте setup.py для этого (еще раз прочитайте документацию Cython).

Ответ 3

Обычный способ - использовать distutils для компиляции cython-сгенерированного файла. Это также дает вам все каталоги include, которые вам нужны переносным способом.