"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo crear eficientemente enlaces de pitón para las bibliotecas C/C ++ usando CTYPES?

¿Cómo puedo crear eficientemente enlaces de pitón para las bibliotecas C/C ++ usando CTYPES?

Publicado el 2025-02-06
Navegar:989

How Can I Efficiently Create Python Bindings for C/C   Libraries Using ctypes?

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:

#include 

class 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.o

Finalmente, 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
Último tutorial Más>

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