Table des matières


SWIG

SWIG est un outil logiciel d'interfaçage pour lier des programmes en C/C++ avec des programmes de plus haut-niveau comme Python, PHP, JavaScript…

Pré-requis

Les paquets suivants doivent être présents pour pouvoir installer swig:

Pour réaliser des interfaces vers python, il est souvent nécessaire d'ajouter python3-dev

apt install python3-dev

Installation

A partir d'un paquet existant

Les paquets deb existent à l'adresse suivante: paquet swig pour debian sid

À partir des sources

Télécharger le paquet swig sur la page du projet 1)

Décompresser le fichier téléchargé:

tar xvfz swig-3.0.12

Lancer l'installation comme préciser sur le site de Swig:

./configure
make

et enfin l'installation finale avec les droits d'administration

make install

Utilisation

De nombreux exemples existent dans le répertoire Examples, un fichier index.html y donne des indications utiles.

Le fichier interface (.i)

Il contient les variables et fonctions qui vont être dans l'interface et donc appelées par le(s) programme(s) de haut-niveau

exemple.i
/* exemple.i */
 %module exemple
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern void set_My_variables(double x, int i);
 extern double get_result(void);
 extern int get_result_entier(void);
 extern void place_mode(int i);
 extern char *get_time();
 %}
 
 extern double My_variable;
 extern void set_My_variables(double x, int i);
 extern double get_result(void);
 extern int get_result_entier(void);
 extern void place_mode(int i);
 extern char *get_time();

Créer les fichiers d'interfaçage

Exemple entre c++ et python:

swig -python -c++ mon_interface.i

Créer l'interface (lib)

Compilation avec les fichiers d'interfaçage, ici example.cxx :

 g++ -c -std=c++14 src/*.cpp src/exemple.cxx -I./lib -I/usr/include/python3.4 
Il faut généralement ajouter le lien vers des librairies, pour python, ci-dessus -I/usr/include/python3.4 par exemple…
à adapter selon le langage haut-niveau cible et/ou la version désirée

Éditions de liens:

g++ -shared *.o -o _exemple.so 

Utilisation de la librairie ainsi créé

Dans l'exemple python/class fourni, en python donc, il suffit de réaliser un import:

>>> from example import *
>>> c = Circle(5.2)
>>> print (c.area())
84.94866535

Retour d'expériences

Avantages

Inconvénients

Voir aussi

zeromq

Liens


Contributeurs principaux: bcag2

1)
Vous pouvez passer via cette autre lien afin de préciser aux développeurs quel binding (vers Python, PHP…) vous allez utiliser