Appeler C/C depuis Python
Lorsque vous travaillez avec des systèmes Windows, il est crucial de lier efficacement Python aux bibliothèques C/C. Parmi les options disponibles, le module ctypes s'impose comme un choix convaincant.
Utilisation de Ctypes pour les liaisons
Ctypes fait partie intégrante de la bibliothèque standard de Python. Cette stabilité inhérente et cette large disponibilité en font une option avantageuse par rapport à d’autres alternatives. De plus, les liaisons ctypes sont conçues pour fonctionner de manière transparente avec chaque version de Python prenant en charge les ctypes, pas seulement celle utilisée lors de la compilation.
Construction d'une liaison Python avec Ctypes
Considérons une classe C simplifiée nommée Foo définie dans foo.cpp :
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
Pour faciliter la communication avec Python via ctypes, ses fonctions doivent être déclarées comme extern "C":
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }
Ensuite, compilez ce code dans une bibliothèque partagée :
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Enfin, créez un wrapper Python (par exemple, fooWrapper.py):
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, vous pouvez interagir avec le C class :
f = Foo() f.bar() # Outputs "Hello" to the screen
Avantages de Ctypes
Ctypes simplifie le processus de liaison du code C/C à Python, fournissant une solution stable et largement applicable sur les systèmes Windows. Il offre une approche robuste et croisée pour l'interface avec les bibliothèques natives de Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!