Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
utilisateurs:bcag2:swig [Le 29/11/2017, 15:50]
bcag2 créée
— (Version actuelle)
Ligne 1: Ligne 1:
-{{tag> programmation}} 
-====== SWIG ====== 
  
-[[wpfr>​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 ===== 
-pcre-config qui vient avec le paquet libpcre3-dev:​ 
-<​code>​apt install libpcre3-dev</​code>​ 
-g++ qui vient avec **[[apt://​build-essential|build-essential]]** 
-<​code>​apt install build-essential</​code>​ 
- 
-===== Installation ===== 
-Télécharger le paquet swig sur [[http://​www.swig.org/​download.html]] ((Vous pouvez passer via [[http://​www.swig.org/​survey.html]] afin de préciser aux développeurs quel binding (vers Python, PHP…) vous allez utiliser)) 
- 
-[[:​tar#​compression_avec_gzip_targz|Décompresser]] le fichier téléchargé:​ 
-<​code>​tar xvfz swig-3.0.12</​code>​ 
- 
-Lancer l'​installation comme préciser sur le [[http://​www.swig.org/​Doc2.0/​SWIGDocumentation.html#​Preface_unix_installation|site de Swig]]: 
-<​code>​ 
-./configure 
-make 
-</​code>​ 
-et enfin l'​installation finale avec les [[:​sudo|droits d'​administration]] 
-<​code>​make install</​code>​ 
- 
-===== Utilisation ===== 
-==== 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 
-<file - 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();​ 
-</​file>​ 
- 
-==== Créer les fichiers d'​interfaçage ==== 
-Exemple entre c++ et python: 
-<​code>​swig -python -c++ mon_interface.i</​code>​ 
- 
-==== Créer l'​interface (lib) ==== 
-Compilation avec les fichiers d'​interfaçage,​ ici //​example.cxx//​ : 
-<​code>​ g++ -c -std=c++14 src/*.cpp src/​exemple.cxx -I./​lib</​code>​ 
- 
-Éditions de liens: 
-<​code>​g++ -shared *.o -o _exemple.pyd </​code>​ 
- 
-==== Utilisation de la librairie ainsi créé ==== 
-Dans notre exemple en python, il suffit de réaliser un //import//: 
-<​code>​ >>>​ import exemple </​code>​ 
- 
-===== Retour d'​expériences ===== 
-==== Avantages ==== 
-  * Séparer les parties //​modèle/​contrôleur//​ et les //vues// (modèle de programmation MVC) 
-  * Résoudre les problèmes de gestion d'​Utf-8 en C/C++ 
-  * Profiter des atouts du (des) langage(s) haut-niveaux,​ voire de leur écosystème (notamment pour python)… PyQtGraph par exemple. 
-  * Permet des modifications rapide dans les vues sans recompilation 
- 
-==== Inconvénients ==== 
-  * Debuggage plus difficile de l'​ensemble:​ pdb et [[:gdb]] en ligne de commande :-/ 
-  * Limitation dans l'​usage des fonctionnalités du C++ modern (C++11/​14/​17) comme //auto//, //enum class//… au moins dans la partie interface 
- 
-===== Voir aussi ===== 
-[[:zeromq]] 
- 
-===== Liens ===== 
-  * [[http://​www.swig.org|le site officiel de swig (en)]] 
-  * [[http://​matthieu-brucher.developpez.com/​tutoriels/​python/​swig-numpy/​|tutoriel sur developpez.com (un peu ancien)]] 
- 
----- 
-//​Contributeurs principaux: [[:​utilisateurs/​bcag2]]//​ 
  • utilisateurs/bcag2/swig.1511967016.txt.gz
  • Dernière modification: Le 29/11/2017, 15:50
  • par bcag2