Компиляция Python для C с использованием Cython - PullRequest
11 голосов
/ 12 декабря 2010

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

В foo.py:

print "Hello World"

Моя команда: cython foo.py.

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

undefined reference to 'main'.

Ответы [ 3 ]

20 голосов
/ 12 декабря 2010

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

11 голосов
/ 12 декабря 2010

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

0 голосов
/ 12 декабря 2010

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

...