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…
Les paquets suivants doivent être présents pour pouvoir installer swig:
apt install libpcre3-dev
apt install build-essential
Pour réaliser des interfaces vers python, il est souvent nécessaire d'ajouter python3-dev
apt install python3-dev
Les paquets deb existent à l'adresse suivante: paquet swig pour debian sid
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
De nombreux exemples existent dans le répertoire Examples, un fichier index.html y donne des indications utiles.
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 */ %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();
Exemple entre c++ et python:
swig -python -c++ mon_interface.i
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
Éditions de liens:
g++ -shared *.o -o _exemple.so
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