Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich mit ctypes effizient Python-Bindungen für C/C-Bibliotheken erstellen?

Wie kann ich mit ctypes effizient Python-Bindungen für C/C-Bibliotheken erstellen?

Linda Hamilton
Freigeben: 2024-12-15 21:52:11
Original
142 Leute haben es durchsucht

How Can I Efficiently Create Python Bindings for C/C   Libraries Using ctypes?

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

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

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

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

Mit Mit diesem Wrapper können wir mit unserer C-Bibliothek in Python interagieren:

f = Foo()
f.bar() # Prints "Hello" to standard output
Nach dem Login kopieren

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!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage