Accueil🇫🇷Chercher

SWIG

SWIG (de l'anglais Simplified Wrapper and Interface Generator) est un outil logiciel open source, permettant de connecter des logiciels ou bibliothèques logicielles Ă©crites en C/C++ avec des langages de scripts tels que : Tcl, Perl, Python, Ruby, PHP, Lua ou d'autres langages de programmation comme Java, C#, Scheme et OCaml. Des sorties peuvent Ă©galement ĂŞtre faites en format XML ou Lisp S-expressions.

Fonction

Le but est de pouvoir appeler des fonctions natives (écrites en C ou C++) par d'autres langages de programmation, passer des données types complexes à ces fonctions, protéger la mémoire contre les libérations inappropriées, hériter d'objet de classes entre langages, etc. Le programmeur écrit un fichier d'interfaçage contenant une liste de fonctions en C/C++ étant visible par un interpréteur. SWIG va compiler le fichier d'interfaçage et générer du code en C/C++ et dans le langage de programmation cible. SWIG va générer du code de conversion pour des fonctions avec des arguments simples; du code de conversion avec des types complexes d'arguments doit être écrit par le programmeur. L'outil SWIG fournit le lien entre C/C++ et l'autre langage de programmation cible. En fonction du langage, le lien se présente sous deux formes:

  • une bibliothèque partagĂ©e qu'un interprĂ©teur peut lier Ă  une sorte de module d'extension, ou;
  • une bibliothèque partagĂ©e qui peut ĂŞtre liĂ©e Ă  d'autres programmes compilĂ©s dans le langage cible (par exemple en utilisant Java Native Interface (JNI) en Java).

SWIG n'est pas utilisé pour appeler des fonctions interprétées par le code natif, ceci doit être implémenté manuellement par le programmeur.

Exemples

SWIG enveloppe de simples déclarations en C en créant une interface qui correspond à la manière dont les déclarations seraient utilisées dans un programme en C. Par exemple, le fichier d'interfaçage suivant:

 %module example
 
 %inline %{
 extern double sin(double x);
 extern int strcmp(const char *, const char *);
 extern int Foo;
 %}
 #define STATUS 50
 #define VERSION "1.1"

Dans ce fichier, il y a deux fonctions sin()​ et strcmp()​, une variable globale Foo​, et deux constantes STATUS​ and VERSION​. Quand SWIG crĂ©e un module d'extension, ces dĂ©clarations sont accessibles comme des fonctions, variables, constantes du script. En Python:

 >>> example.sin(3)
 0.141120008
 >>> example.strcmp('Dave','Mike')
 -1
 >>> print example.cvar.Foo
 42
 >>> print example.STATUS
 50
 >>> print example.VERSION
 1.1

Annexes

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.