swigAan de slag met swig


Opmerkingen

SWIG (Simplified Wrapper and Interface Generator) is een hulpmiddel voor het verpakken van C- en C ++ -code in verschillende doeltalen, waardoor C / C ++ API's in andere talen kunnen worden gebruikt.

SWIG parseert headerbestanden en genereert code op een manier die afhankelijk is van de doeltaal. De codegeneratie kan worden beheerd door de ontwikkelaar in het SWIG-interfacebestand en via opdrachtregelopties.

In het interfacebestand vertelt de ontwikkelaar SWIG wat hij moet inpakken en hoe. SWIG heeft een eigen preprocessorsysteem en vele speciale richtlijnen om te bepalen hoe gegevens, klassen en functies in de doeltaal worden verpakt. Sommige van deze richtlijnen zijn algemeen en andere zijn specifiek voor de doeltaal.

Centraal in de werking van SWIG is de typemap . Typemaps zijn regels die specificeren hoe types worden gepositioneerd tussen de C-code en de doeltaal. Typemaps kunnen globaal worden toegepast op alles in het interfacebestand of lokaal per geval. Ze kunnen indien nodig ook worden aangepast.

Zodra SWIG op het interfacebestand wordt uitgevoerd, produceert het een C- of C ++ -bestand dat de wrapper is. Dit bestand moet worden gecompileerd en gekoppeld aan het C / C ++ -programma of de statische bibliotheek waarmee de wrapper moet communiceren om een gedeelde bibliotheek te produceren. Die bibliotheek wordt op zijn beurt gebruikt door de doeltaal.

RTFM

Het kan niet genoeg worden benadrukt dat SWIG al wordt geleverd met een uitstekende documentatiehandleiding . Dit is enerzijds zeer gedetailleerd, omvat de installatie en bevat veel concrete voorbeelden in de vorm van codefragmenten, waaronder een compleet SWIG-voorbeeld "hallo wereld".

Maar het belangrijkste is dat het ook uitlegt hoe u de handleiding niet kunt lezen :

Als u een hekel hebt aan het lezen van handleidingen, bekijk dan de " Introductie " die een paar eenvoudige voorbeelden bevat. Deze voorbeelden bevatten ongeveer 95% van alles wat u moet weten om SWIG te gebruiken. Gebruik daarna eenvoudigweg de taalspecifieke hoofdstukken als referentie. De SWIG-distributie wordt ook geleverd met een grote map met voorbeelden die verschillende onderwerpen illustreren.

Hallo Wereld

Een minimaal voorbeeld van het gebruik van SWIG.

HelloWorld.i , het SWIG-interfacebestand

%module helloworld    //the name of the module SWIG will create
%{                    //code inside %{...%} gets inserted into the wrapper file
#include "myheader.h" //helloworld_wrap.cxx includes this header
%}

%include "myheader.h"   //include the header for SWIG to parse
 

Vervolgens op de opdrachtregel

swig -c++ -java HelloWorld.i
 

wat betekent dat we C ++ (in tegenstelling tot C) inpakken met Java als de doeltaal zoals gespecificeerd door HelloWorld.i. Dit zal een C ++ -bestand produceren, helloworld_wrap.cxx, dat de wrapper-code heeft. Dit bestand moet worden gecompileerd en gekoppeld aan de code waarmee de wrapper zou moeten communiceren (bijvoorbeeld een statische bibliotheek) om een gedeelde bibliotheek te produceren. Bij sommige talen, zoals Java in ons voorbeeld, wordt extra code gegenereerd - in ons geval zal er ten minste één Java-klassebestand zijn.

Installatie of instellingen

Gedetailleerde instructies voor het instellen of installeren van swig.