SWIG

SWIG
Тип Инструмент для разработки
Автор Дэвид М. Бизли[вд]
Разработчик Сообщество
Написана на C, C++
Интерфейс Командная строка
Операционные системы POSIX, MS Windows
Дата выпуска 1996 год
Последняя версия
Репозиторий github.com/swig/swig
Лицензия Лицензия в стиле BSD
Сайт swig.org

SWIG (англ. simplified wrapper and interface generator) — свободный инструмент для связывания программ и библиотек, написанных на языках 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.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.