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
Linda HamiltonOriginal
2024-12-11 12:29:11660Durchsuche

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;
    }
};

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(); }
}

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

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)

Mit diesem Setup können Sie die C-Funktionen jetzt nahtlos aus Python aufrufen:

f = Foo()
f.bar()  # Output: "Hello" displayed on screen

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!

Stellungnahme:
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