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
DDDOriginal
2024-12-26 18:37:14388Durchsuche

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

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!

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