¿Cómo llamar a C/C++ desde Python?

Para aprovechar la fortaleza de ambos lenguajes, los desarrolladores usan enlaces de Python que les permiten llamar a bibliotecas C/C++ desde Python.

Ahora, surge la pregunta de por qué es necesario hacer esto.

  1. Como sabemos, C tiene una velocidad de ejecución más rápida y para superar la limitación de Global Interpreter Lock (GIL) en python, los enlaces de python son útiles.
  2. Tenemos una biblioteca grande, estable y probada en C/C++, que será una ventaja para usar.
  3. Para realizar pruebas a gran escala de los sistemas utilizando las herramientas de prueba de Python.

Veamos el código C que queremos ejecutar con Python:

C++

#include <iostream>
class Geek{
    public:
        void myFunction(){
            std::cout << "Hello Geek!!!" << std::endl;
        }
};
int main()
{
    // Creating an object
    Geek t; 
  
    // Calling function
    t.myFunction();  
   
    return 0;
}

Tenemos que proporcionar esas declaraciones de cpp como «C» externa porque los ctypes solo pueden interactuar con funciones de C.

C++

extern "C" {
    Geek* Geek_new(){ return new Geek(); }
    void Geek_myFunction(Geek* geek){ geek -> myFunction(); }
}

Ahora, compile este código en la biblioteca compartida:

Finalmente, escriba el contenedor de python:

Python3

# import the module
from ctypes import cdll
  
# load the library
lib = cdll.LoadLibrary('./libgeek.so')
  
# create a Geek class
class Geek(object):
  
    # constructor
    def __init__(self):
  
        # attribute
        self.obj = lib.Geek_new()
  
    # define method
    def myFunction(self):
        lib.Geek_myFunction(self.obj)
  
# create a Geek class object
f = Geek()
  
# object method calling
f.myFunction()

Producción :

Hello Geek!!!

Publicación traducida automáticamente

Artículo escrito por tanvi_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *