Компиляция 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, которые вам нужны переносным способом.