Heim > Backend-Entwicklung > Python-Tutorial > Wie kann das ctypes-Modul von Python nahtlos in C/C-Bibliotheken integriert werden?

Wie kann das ctypes-Modul von Python nahtlos in C/C-Bibliotheken integriert werden?

Linda Hamilton
Freigeben: 2024-12-11 12:29:11
Original
676 Leute haben es durchsucht

How Can Python's ctypes Module Seamlessly Integrate with C/C   Libraries?

Nutzung von Python für die C/C-Integration

Python bietet vielseitige Funktionen für die Anbindung externer Bibliotheken. Ein häufiges Szenario ist das Aufrufen von C- oder C-Funktionen aus Python heraus. Um dies zu erreichen, ist die Bereitstellung des ctypes-Moduls ein effektiver Ansatz. Im Gegensatz zu bestimmten Tools von Drittanbietern ist ctypes in die Python-Standardbibliothek eingebettet, was eine erhöhte Stabilität und umfassende Verfügbarkeit gewährleistet.

Durch die Verwendung von ctypes können Sie die Abhängigkeit von Python zur Kompilierungszeit umgehen. Folglich kann jede mit ctypes ausgestattete Python-Instanz Ihre Bindung nutzen, unabhängig von der bei der Kompilierung verwendeten Version.

Um die Verwendung von ctypes zu veranschaulichen, betrachten wir eine grundlegende C-Klasse, Foo, die in einer Datei namens foo definiert ist. cpp:

#include <iostream>

class Foo {
public:
    void bar() {
        std::cout << "Hello" << std::endl;
    }
};
Nach dem Login kopieren

Um die Interaktion mit ctypes zu erleichtern, müssen wir die C-Funktionen als extern deklarieren „C“:

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:

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 schreiben wir einen Python-Wrapper, um die Lücke zu schließen:

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 diesem Setup können Sie die C-Funktionen jetzt nahtlos aus Python aufrufen:

f = Foo()
f.bar()  # Output: "Hello" displayed on screen
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann das ctypes-Modul von Python nahtlos in C/C-Bibliotheken integriert werden?. 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