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++) depuis 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
- (en) Site officiel
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.
- 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:
- 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.
- 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.
- 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.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.