Interfacing c/c con python
la facilidad de uso y extensibilidad de Python lo convierte en un lenguaje atractivo para programadores de todos los niveles. Sin embargo, hay momentos en que se puede integrar con las bibliotecas C/C existentes. Este artículo explora el método más eficiente para construir enlaces de Python para estas bibliotecas.
El módulo Ctypes, una parte de la biblioteca estándar de Python, ofrece una solución estable y ampliamente disponible para esta tarea. A diferencia de otros métodos vinculantes, Ctypes no depende de la versión de Python contra la cual se compiló, asegurando la compatibilidad con varias instalaciones de Python.
Considere el siguiente fragmento de código escrito en c:
#includeclass Foo{ public: void bar(){ std::cout para interactuar esto con Python, debemos declarar las funciones como externos "c" para que ctypes las reconozca:
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }Siguiente, compilamos este código en una biblioteca compartida usando:
g -c -fPIC foo.cpp -o foo.o g -shared -Wl,-soname,libfoo.so -o libfoo.so foo.oFinalmente, creamos un envoltorio de 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)con este contenedor, podemos interactuar con nuestra biblioteca C en python:
f = Foo() f.bar() # Prints "Hello" to standard output
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3