To demonstrate how to create a shared C library and using it with Python’s
ctypes library we are going to create a shared C library. First create the C
header file mean.h
:
// Returns the mean of passed parameters
double mean(double, double);
Next create the C file mean.c
:
#include "mean.h"
double mean(double a, double b) {
return (a+b)/2;
}
Now we can create the shared C library by compiling it using gcc
:
$ gcc -shared -o libmean.so.1 mean.c
Finally we can import the shared C library using the ctypes Python module, consider the following interative shell:
>>> import ctypes
>>> libmean = ctypes.CDLL('./libmean.so.1') # loads the shared library
>>> libmean.mean.restype = ctypes.c_double # define mean function return type
>>> libmean.mean(ctypes.c_double(10), ctypes.c_double(3)) # call mean function needs cast arg types
6.5
>>> libmean.mean.argtypes = [ctypes.c_double, ctypes.c_double] # define arguments types
>>> libmean.mean(10, 3) # call mean function does not need cast arg types
6.5
>>> type(libmean.mean(10, 5)) # returned value is converted to python types
<class 'float'>
This was tested using Python 3.6.4 and gcc 7.3.1 on Fedora 27. Check the ctypes documentation for more information.