Heim  >  Artikel  >  Backend-Entwicklung  >  C/C++ mit SWIG in Python einbinden

C/C++ mit SWIG in Python einbinden

王林
王林nach vorne
2023-08-25 20:25:101319Durchsuche

C/C++ mit SWIG in Python einbinden

Es gibt viele Möglichkeiten, vorhandene C- oder C++-Funktionalität in Python zu kapseln. In diesem Abschnitt erfahren Sie, wie Sie mit SWIG die C/C++-Funktionalität umschließen. Hier sind weitere Optionen zum Einbinden der C/C++-Funktionalität in Python.

  • Manuelle Verpackung
  • Verwenden Sie Pyrex, um C-Code zu verpacken.
  • Ctypes
  • SIP
  • Boost Python

SWIG (Simple Wrapper Interface Generator) kann viele andere Sprachen verwenden, darunter Perl, Python, PHP, Ruby, Tcl, C#, Common Lisp (CLISP, Allegro, CL , UFFI, CFFI), Java, Modula-3 und OCAML unterstützen auch mehrere interpretierte und kompilierte Scheme-Implementierungen (wie Guile, MzScheme, Chicken

Aber wir werden hier nur die Implementierung mit Python diskutieren

SWIG). eine Makrosprache, die C-Code versteht und dann Wrapper-Code für die Sprache Ihrer Wahl ausspuckt. //www.swig.org/download.html

Darüber hinaus benötigen Sie möglicherweise auch „Microsoft Visual Studio 14.0“ oder höher, um das Swig-Programm unter Windows auszuführen.

Für Anweisungen zur Verwendung von Swig haben wir beispielsweise einige c Funktionen und wir möchten sie zu anderen Sprachen wie Tcl, Perl, Python (ich interagiere mit Python), Java und C# hinzufügen.

Meine C-Datei ist example.c

#include "example.h"
int fact(int n) {
   if (n < 0) {       /* This should probably return an error, but this is simpler */
      return 0;
   }
   if (n == 0) {
      return 1;
   } else {
      /* testing for overflow would be a good idea here */
      return n * fact(n-1);
   }
}

Schnittstellendatei:

Jetzt. Wenn Sie C-Dateien zu Ihrer bevorzugten Sprache hinzufügen möchten, müssen Sie eine „Schnittstellendatei“ schreiben, die die Eingabe für SWIG ist Habe die Header-Datei in die vorherige Beispieldatei eingefügt. Dies ist meine Header-Datei:

example.h

/* File: example.i */
%module example
%{
   #define SWIG_FILE_WITH_INIT
   #include "example.h"
%}
%include "example.h"

Installationsdatei:

int fact(int n);

Erstellen des Wrappers

Jetzt erstellen wir einen Python-Wrapper mit unserer Schnittstellendatei (example.i) . Um einen Wrapper für Ihre Funktion zu erstellen, führen Sie einfach den folgenden Befehl auf der CLI aus:

rrree

Wenn Sie jetzt das aktuelle Arbeitsverzeichnis sehen, wird Ihre Wrap-Datei so angezeigt „example_wrap.c“, sonst heißt die Wrap-Datei etwa

from distutils.core import setup, Extension
example_module = Extension(&#39;_example&#39;,
   sources=[&#39;example_wrap.c&#39;, &#39;example.c&#39;],
)
setup (name = &#39;example&#39;,
   version = &#39;0.1&#39;,
   author = "SWIG Docs",
   description = """Simple swig example from docs""",
   ext_modules = [example_module],
   py_modules = ["example"],
)

Wenn Ihre Beispieldatei also test.c lautet, lautet Ihre Wrapper-Datei „test_wrapper.c“.

Erstellen Sie die Erweiterung

>swig -python example.i

Das ist es. Jetzt können wir die C-Sprache in die Python-Sprache umwandeln, indem wir sie direkt ausführen oder eine virtuelle Umgebung erstellen und separat ausführen.

&ldquo;Your_File_Name&rdquo; + &ldquo;_wrapper&rdquo; + &ldquo;Your_language_extension&rdquo;

Das war's, jetzt importieren Sie die Funktion aus der Datei und führen Sie sie aus.

>python setup.py build_ext
running build_ext
building &#39;_example&#39; extension
creating build
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
&hellip;.

Das obige ist der detaillierte Inhalt vonC/C++ mit SWIG in Python einbinden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen