Calling C Functions from Python

Filed Under: Python

We can call a C function from Python program using the ctypes module.

Calling C Function from Python

It involves the following steps:

  1. Creating a C file (.c extension) with the required functions
  2. Creating a shared library file (.so extension) using the C compiler.
  3. In the Python program, create a ctypes.CDLL instance from the shared file.
  4. Finally, call the C function using the format {CDLL_instance}.{function_name}({function_parameters}).

Step 1: Creating a C File with some functions

#include <stdio.h>

int square(int i) {
	return i * i;

We have a simple C function that will return the square of an integer. I have saved this function code in the file named my_functions.c.

Step 2: Creating the Shared Library File

We can use the following command to create the shared library file from the C source file.

$ cc -fPIC -shared -o my_functions.c
C File Shared Library File

C File and Shared Library File

Step 3: Calling C Function from Python Program

>>> from ctypes import *
>>> so_file = "/Users/pankaj/"
>>> my_functions = CDLL(so_file)
>>> print(type(my_functions))
<class 'ctypes.CDLL'>
>>> print(my_functions.square(10))
>>> print(my_functions.square(8))
Calling C Function From Python

Calling C Function From Python

If you change the C program file, you will have to regenerate the shared library file.


The python default implementation is written in C programming and it’s called CPython. So it’s not very uncommon to use C functions in a python program. In this tutorial, we learned how to easily call C functions in a python program.


  1. shah sawood says:

    It does not work properly. Give rise to certain errors.

  2. Adanech Alemu says:

    I found this helpfull. Thankyou very much

  3. Mauro says:

    What if my C file includes some other custom C library? It seems that the resulting .so file doesn’t include them.

  4. Itachi Uchiha says:

    This was very helpful, thank you a lot, my guy!

  5. Armagan says:

    it doesnt return the intteger that I defined in C file, It does net get a value by using scanf in C program.d

  6. m j says:

    doesn’t work.

    Traceback (most recent call last):
    File “”, line 1, in
    TypeError: ‘LibraryLoader’ object is not callable

  7. Jean Baptiste says:

    is it possible to connect EM-18 RFID Reader to raspberry pi direct without using RS232 USB adapter? Help me please Sir.

  8. Keerthana says:

    how can i run cmake commands using python.
    Eg: I have a folder with .c files in it and they are linked using CMakeList.txt
    I do compile them using “cmake -H. -Bbuild” commands
    I need to put the above command in python script and run the .py directly to build the c files.can anyone help me

  9. Manomugdha Biswas says:

    Hi Pankaj,
    Is it possible to call functions in Linux c executable (not . so file) from python?

Comments are closed.

Generic selectors
Exact matches only
Search in title
Search in content