Heim > Backend-Entwicklung > Python-Tutorial > Wie können ctypes Python- und C/C-Bibliotheken nahtlos überbrücken?

Wie können ctypes Python- und C/C-Bibliotheken nahtlos überbrücken?

DDD
Freigeben: 2024-12-26 18:37:14
Original
448 Leute haben es durchsucht

How Can ctypes Seamlessly Bridge Python and C/C   Libraries?

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

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

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage