SWIG

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
SWIG
Тип

Инструмент для разработки

Разработчики

Сообщество

Написана на

C, C++

Интерфейс

Командная строка

Операционная система

POSIX, MS Windows

Первый выпуск

1996 год

Последняя версия

2.0.10 (27 мая 2013)

Лицензия

Лицензия в стиле BSD

Сайт

swig.org

SWIG (англ. simplified wrapper and interface generator) — свободный инструмент для связывания (англ.) (англ. binding) программ и библиотек, написанных на языках C и C++, с интерпретируемыми (Tcl, Perl, Python, Ruby, PHP) или компилируемыми (Java, C#, Scheme, OCaml) языками. Основная цель: обеспечение возможности вызова функций, написанных на одних языках, из кода на других языках. Программист создаёт файл .i с описанием экспортируемых функций; SWIG генерирует исходный код для склеивания C/C++ и нужного языка, создаёт исполняемый файл. Вид исполняемого файла зависит от выбранного языка:

  • исполняемый файл со встроенным интерпретатором скриптового языка;
  • библиотека, функции C/C++ из которой автоматически становятся доступны из другого языка;
  • библиотека функций C/C++ и библиотека функций - обёрток над функциями C/C++ (например, JNI для Java).

Движки скриптовых языков встаивают с программы на C/C++ по следующим причинам:

  • скорость разработки с использованием скриптового языка выше, чем скорость разработки на C/C++;
  • пользователи получают возможность автоматизации своих действий с помощью сценариев. Например, в играх сценарии используются для написания сюжета и уровней;
  • разработчики получают возможность автоматизации для тестирования ПО на этапе разработки. Готовое ПО может не включать скриптовый движок.

Причины создания библиотек функций C/C++, доступных интерпретаторам других языков:

SWIG написан на языках С и C++, распространяется по лицензии, похожей на BSD, с февраля 1996 года. Лицензия SWIG позволяет использовать, распространять и модифицировать код SWIG для коммерческих и некоммерческих целей практически без ограничений.

Пример: вызов функции C из Python[править | править вики-текст]

Пусть имеется код на языке 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"
>>>


Ссылки[править | править вики-текст]

Литература[править | править вики-текст]

  • Hans Petter Langtangen Python scripting for computational science. — Springer, 2008. — 750 с. — ISBN 9783540739159.