Open In App

How to call C / C++ from Python?

Last Updated : 29 Jul, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

In order to take advantage of the strength of both languages, developers use Python bindings which allows them to call C/C++ libraries from python.

Now, the question arises that why there is a need for doing this?

  1. As we know that, C has faster execution speed and to overcome the limitation of Global Interpreter Lock(GIL) in python, python bindings are helpful.
  2. We have a large, stable and tested library in C/C++, which will be advantageous to use.
  3. For performing large scale testing of the systems using Python test tools.

Let’s see the C code which we want to execute with 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;
}


We have to provide those cpp declarations as extern “C” because ctypes can only interact with C functions.

C++




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


Now, compile this code to the shared library :

Finally, write the python wrapper:

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()


Output :

Hello Geek!!!


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads