Пример встраивания интерпретатора в программу на C 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Пример встраивания интерпретатора в программу на C

Поиск

Пример встраивания интерпретатора в программу на C

 

ИнтерпретаторPythonможет быть встроен в программу наCс использованиемC API.Это лучше всего демонстрирует уже работающий пример:

 

/* File : demo.c */

 

/* Пример встраивания интерпретатора Python в другую программу */ #include "Python.h"

 

main(int argc, char **argv)

 

{

/* Передает argv[0] интерпретатору Python */ Py_SetProgramName(argv[0]);

 

/* Инициализация интерпретатора */ Py_Initialize();

 

/* ... */


 


/* Выполнение операторов Python (как бы модуль __main__) */ PyRun_SimpleString("import time\n"); PyRun_SimpleString("print time.localtime(time.time())\n");

 

/* ... */

 

/* Завершение работы интерпретатора */ Py_Finalize();

}

 

Компиляция этого примера с помощью компилятораgccможет быть выполнена,например,так:

 

ver="2.3"

 

gcc -fpic demo.c -DHAVE_CONFIG_H -lm -lpython${ver} \ -lpthread -lutil -ldl \ -I/usr/local/include/python${ver} \ -L/usr/local/lib/python${ver}/config \

 

-Wl,-E \ -o demo

 

 

Здесь следует отметить следующие моменты:

 

· программу необходимо компилировать вместе с библиотекойlibpythonсоответствующей версии(для этого используется опция -l,за которой следует имя библиотеки)и еще с библиотеками,которые требуются дляPython:libpthread,libm,libutil и т.п.)

· опция pic порождает код,не зависящий от позиции,что позволяет в дальнейшем

 

динамически компоновать код

 

· обычно требуется явно указать каталог,в котором лежит заголовочный файлPython.h (в gcc это делается опцией -I)

 

· чтобы получившийся исполняемый файл мог корректно предоставлять имена для динамически загружаемых модулей,требуется передать компоновщику опцию -E:это можно сделать из gcc с помощью опции -Wl,-E. (В противном случае,модуль time,а это модуль расширения в виде динамически загружаемого модуля,не будет работать из-за того,что не увидит имен,определенных вlibpython)

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 127; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.005 с.)