Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

SWIG

Материал из Xgu.ru

Перейти к: навигация, поиск


SWIG — инструмент, позволяющий связывать программы на Си и программы на других, более высокоуровневых языках, таких как, например, Python или Ruby.

[править] Поддерживаемые языки

  • Allegro CL
  • C#
  • CFFI
  • CLISP
  • Chicken
  • Guile
  • Java
  • Lua
  • Modula-3
  • Mzscheme
  • OCAML
  • Octave
  • Perl
  • PHP
  • Python
  • R
  • Ruby
  • Tcl
  • UFFI

[править] Пример использования

Пример использования SWIG[1].

Модуль на Си, который мы будем интегрировать: <c/> /* File : example.c */

#include <time.h>
double My_variable = 3.0;

int fact(int n) {
    if (n <= 1) return 1;
    else return n*fact(n-1);
}

int my_mod(int x, int y) {
    return (x%y);
}
	
char *get_time()
{
    time_t ltime;
    time(&ltime);
    return ctime(&ltime);
}

Интерфейсный модуль:

/* example.i */
 %module example
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();
 %}
 
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();

Сборка модуля для Python:

%$ swig -python example.i
%$ gcc -c example.c example_wrap.c \
        -I/usr/local/include/python2.1
%$ ld -shared example.o example_wrap.o -o _example.so 

Использование модуля в Python:

>>> import example
>>> example.fact(5)
120
>>> example.my_mod(7,3)
1
>>> example.get_time()
'Sun Feb 11 23:01:07 1996'
>>>

[править] Примечания

  1. Источник: http://www.swig.org/tutorial.html
Источник — «http://xgu.ru/wiki/SWIG»
На других языках