Interfaçage c / c avec python
La facilité d'utilisation et l'extensibilité de Python en font un langage attrayant pour les programmeurs de tous les niveaux. Cependant, il y a des moments où l'intégration aux bibliothèques C / C existantes est souhaitable. Cet article explore la méthode la plus efficace pour construire des liaisons Python pour ces bibliothèques.
Le module CTYPES, une partie de la bibliothèque standard de Python, propose une solution stable et largement disponible pour cette tâche. Contrairement à d'autres méthodes de liaison, CTYPES ne s'appuie pas sur la version Python par rapport à laquelle il a été compilé, assurant la compatibilité avec diverses installations Python.
Considérez l'extrait de code suivant écrit en C:
#includeclass Foo{ public: void bar(){ std::cout Pour l'interfacer avec Python, nous devons déclarer les fonctions comme extern "C" pour Ctypes pour les reconnaître:
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }Suivant, nous compilons ce code en bibliothèque partagée en utilisant:
g -c -fPIC foo.cpp -o foo.o g -shared -Wl,-soname,libfoo.so -o libfoo.so foo.oEnfin, nous créons un wrapper python:
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)avec ce wrapper, nous pouvons interagir avec notre bibliothèque C dans Python:
f = Foo() f.bar() # Prints "Hello" to standard output
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3