Heim >Backend-Entwicklung >Python-Tutorial >Wie können ctypes Python- und C/C-Bibliotheken nahtlos überbrücken?
C/C aus Python mit ctypes aufrufen
Beim Versuch, eine Brücke zwischen Python und C/C zu schlagen, taucht das ctypes-Modul als auf eine bevorzugte Wahl. Die nahtlose Integration in die Standardbibliothek von Python sorgt für Stabilität und umfassende Zugänglichkeit. Im Gegensatz zu swig, bei dem gelegentlich Probleme auftreten können, stellt ctypes eine zuverlässige Brücke zwischen den beiden Sprachen dar.
ctypes zeichnet sich durch seine Fähigkeit aus, Abhängigkeiten zur Kompilierungszeit von Python zu verarbeiten, sodass Ihre Bindungen auf jeder Python-Installation einwandfrei funktionieren unterstützt ctypes, unabhängig von der für die Kompilierung verwendeten Version.
Um die Verwendung zu veranschaulichen, betrachten Sie die folgende C-Klasse mit dem Namen Foo:
#include <iostream> class Foo { public: void bar() { std::cout << "Hello" << std::endl; } };
Da ctypes nur mit C-Funktionen interagieren können, müssen Sie diese Funktionen als externes „C“ deklarieren:
extern "C" { Foo* Foo_new() { return new Foo(); } void Foo_bar(Foo* foo) { foo->bar(); } }
Kompilieren Sie diesen Code in eine gemeinsam genutzte Bibliothek:
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Schließlich erstellen Sie einen Python-Wrapper, um die Verbindung zu überbrücken:
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 diesem Setup können Sie kann die C-Bibliothek mühelos von Python aus aufrufen:
f = Foo() f.bar() # Prints "Hello" on the screen
ctypes bietet eine unkomplizierte und effiziente Lösung zum Erstellen von Python-Bindungen an C/C-Bibliotheken und erleichtert die nahtlose Interoperabilität zwischen diesen Programmiersprachen.
Das obige ist der detaillierte Inhalt vonWie können ctypes Python- und C/C-Bibliotheken nahtlos überbrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!