Schnittstelle zwischen C/C und Python
Pythons Benutzerfreundlichkeit und Erweiterbarkeit machen es zu einer attraktiven Sprache für Programmierer aller Niveaus. Es gibt jedoch Zeiten, in denen eine Integration mit vorhandenen C/C-Bibliotheken wünschenswert ist. In diesem Artikel wird die effizienteste Methode zum Erstellen von Python-Bindungen für diese Bibliotheken untersucht.
Das ctypes-Modul, ein Teil der Standardbibliothek von Python, bietet eine stabile und allgemein verfügbare Lösung für diese Aufgabe. Im Gegensatz zu anderen Bindungsmethoden ist ctypes nicht auf die Python-Version angewiesen, mit der es kompiliert wurde, was die Kompatibilität mit verschiedenen Python-Installationen gewährleistet.
Beachten Sie den folgenden in C geschriebenen Codeausschnitt:
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
Um dies mit Python zu verbinden, müssen wir die Funktionen als externes „C“ deklarieren, damit ctypes sie erkennt sie:
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }
Als nächstes kompilieren wir diesen Code in eine gemeinsam genutzte Bibliothek mit:
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Schließlich erstellen wir einen Python-Wrapper:
from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bar(self.obj)
Mit Mit diesem Wrapper können wir mit unserer C-Bibliothek in Python interagieren:
f = Foo() f.bar() # Prints "Hello" to standard output
Das obige ist der detaillierte Inhalt vonWie kann ich mit ctypes effizient Python-Bindungen für C/C-Bibliotheken erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!