SMS Schleswig-Holstein (1906)
- 1 year ago
- 0
- 0
SWIG ( англ. s implified w rapper and i nterface g enerator ) — свободный инструмент для связывания программ и библиотек , написанных на языках C и C++ , с интерпретируемыми ( Tcl , Perl , Python , Ruby , PHP ) или компилируемыми ( Java , C# , Scheme , OCaml ) языками. Основная цель: обеспечение возможности вызова функций, написанных на одних языках, из кода на других языках. Программист создаёт файл .i с описанием экспортируемых функций; SWIG генерирует исходный код для склеивания C/C++ и нужного языка, создаёт исполняемый файл .
Вид исполняемого файла зависит от выбранного языка:
Движки скриптовых языков встраивают в программы на C/C++ по следующим причинам:
Причины создания библиотек функций C/C++, доступных интерпретаторам других языков:
SWIG написан на языках С и C++ , распространяется по лицензии, похожей на BSD , с февраля 1996 года . Лицензия SWIG позволяет использовать, распространять и модифицировать код SWIG для коммерческих и некоммерческих целей практически без ограничений.
Пусть имеется код на языке C, реализующий некоторую функцию, например, печать текста.
/* File : try.c */
#include <stdio.h>
void echo(void) {
printf("\"Hello World\"\n");
}
Чтобы вызвать функцию echo() из Python, необходимо написать интерфейсный файл (расширение .i ) следующего содержания:
/* File : try.i */
%module mytry
extern void echo(void);
и выполнить в терминале ОС Unix следующие команды:
swig -python try.i
gcc -c -fpic try_wrap.c try.c -DHAVE_CONFIG_H -I"/usr/local/include/python2.5" -I"/usr/local/lib/python2.5/config"
gcc -shared try.o try_wrap.o -o _mytry.so
Для ОС Windows (при использовании Cygwin или MinGW ) команды будут отличаться:
swig -python try.i
gcc -c try_wrap.c try.c -DHAVE_CONFIG_H
gcc -shared try_wrap.o try.o -o _try.pyd -lpython25
SWIG автоматически создаст несколько файлов: « mytry.py », « try_wrap.c » и исполняемый файл.
Для вызова функции echo() из Python запустите интерпретатор и выполните следующий код:
>>> import mytry
>>> mytry.echo()
"Hello World"
>>>