Heim >Backend-Entwicklung >Python-Tutorial >So verwenden Sie C++-Code in Python
Jeder weiß, dass die Vorteile von Python in einer hohen Entwicklungseffizienz und Benutzerfreundlichkeit liegen, während C++ eine hohe Betriebseffizienz aufweist. Beide können sich gegenseitig ergänzen, sei es die Einbettung von C++-Code in ein Python-Projekt oder die Verwendung von Python zur Implementierung von Peripheriegeräten In einer C++-Projektfunktion muss Python möglicherweise C++-Module aufrufen.
Im Folgenden finden Sie eine Liste von Methoden zum Exportieren von zentralisiertem C++-Code in eine Python-Schnittstelle. Lasst uns gemeinsam lernen.
Originalexport (empfohlenes Lernen: Python-Video-Tutorial)
Der Python-Interpreter ist in C implementiert, also As Solange unsere C++-Datenstruktur von Python verstanden werden kann, kann sie theoretisch direkt aufgerufen werden. Wir implementieren test1.cpp wie folgt
#include <Python.h> int Add(int x, int y) { return x + y; } int Del(int x, int y) { return x - y; } PyObject* WrappAdd(PyObject* self, PyObject* args) { int x, y; if (!PyArg_ParseTuple(args, "ii", &x, &y)) { return NULL; } return Py_BuildValue("i", Add(x, y)); } PyObject* WrappDel(PyObject* self, PyObject* args) { int x, y; if (!PyArg_ParseTuple(args, "ii", &x, &y)) { return NULL; } return Py_BuildValue("i", Del(x, y)); } static PyMethodDef test_methods[] = { {"Add", WrappAdd, METH_VARARGS, "something"}, {"Del", WrappDel, METH_VARARGS, "something"}, {NULL, NULL} }; extern "C" void inittest1() { Py_InitModule("test1", test_methods); }
Der Kompilierungsbefehl lautet wie folgt
g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so
-fPIC: Positionsunabhängigen Zielcode generieren, der für dynamische Verbindungen geeignet ist ;
-L Pfad: bedeutet die Suche nach Bibliotheksdateien im Pfadverzeichnis, z. B. -L bedeutet die Suche im aktuellen Verzeichnis
-I Pfad: bedeutet die Suche nach Header-Dateien im Pfadverzeichnis; -o Datei: Gibt die Ausgabedatei als Datei an;
-shared: Generieren Sie eine gemeinsam genutzte Bibliotheksdatei
Führen Sie den Python-Interpreter aus und testen Sie ihn wie folgt
>>> import test1 >>> test1.Add(1,2) 3
Hier sind einige Punkte zu beachten
Wenn der Name der generierten dynamischen Bibliothek test1 ist, muss die Quelldatei über die Funktion inittest1 verfügen und der erste Parameter von Py_InitModule muss „test1“ sein ", andernfalls schlägt das Python-Importmodul fehl Wenn es sich um eine CPP-Quelldatei handelt, muss die Funktion inittest1 mit extern „C“ geändert werden. Wenn es sich um eine C-Quelldatei handelt, ist sie nicht erforderlich. Der Grund dafür ist, dass der Python-Interpreter beim Importieren von Bibliotheken nach Funktionen wie initxxx sucht und C++ beim Codieren von Funktionssymbolen die Funktionslänge und den Parametertyp unterschiedlich berücksichtigt Überprüfen Sie die Funktionssymbole. Das C++-Filtertool kann den Funktionsprototyp mithilfe der Symbole dekodieren. Weitere technische Artikel zu Python finden Sie in der SpaltePython-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonSo verwenden Sie C++-Code in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!