Heim > Backend-Entwicklung > C++ > Hauptteil

C/C++ mit SWIG in Python einbinden

王林
Freigeben: 2023-08-25 20:25:10
nach vorne
1322 Leute haben es durchsucht

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);
   }
}
Nach dem Login kopieren

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"
Nach dem Login kopieren

Installationsdatei:

int fact(int n);
Nach dem Login kopieren

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"],
)
Nach dem Login kopieren

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

Erstellen Sie die Erweiterung

>swig -python example.i
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;.
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage