Using C codes in Python | Set 2 (original) (raw)
Last Updated : 18 Mar, 2019
Prerequisite: Using C codes in Python | Set 1
In the previous article, we have discussed how to access C code in Python. Now, let’s see how to access C functions.
Code #1 : Accessing C functions with Python
import
work
print
(
"GCD : "
, work.gcd(
35
,
42
))
print
(
"\ndivide : "
, work.divide(
42
,
8
))
print
(
"\navg : "
, work.avg([
1
,
2
,
3
]))
p1
=
work.Point(
1
,
2
)
p2
=
work.Point(
4
,
5
)
print
(
"\ndistance : "
, work.distance(p1, p2))
Output :
GCD : 7
divide : (5, 2)
avg : 2.0
distance : 4.242640687119285
Issue ?
Now the work done above has an issue that for the overall packaging of C and Python code together, using ctypes to access C code that has been compiled, one has to make sure that the shared library gets placed in a location, where the work.py
module can find it. One possibility is to put the resulting libsample.so
file in the same directory as the supporting Python code.
So, if the C library is installed elsewhere, then path has to be adjusted accordingly. If it is installed as a standard library on the machine, then ctypes.util.find_library()
function can be used.
Code #2 : Path Example
from
ctypes.util
import
find_library
find_library(
'm'
)
find_library(
'pthread'
)
find_library(
'sample'
)
Output :
/usr/lib/libm.dylib
/usr/lib/libpthread.dylib
/usr/local/lib/libsample.so
Again, ctypes won’t work at all if it can’t locate the library with the C code. ctypes.cdll.LoadLibrary()
is used to load the C library, once it’s location is known.
_mod
=
ctypes.cdll.LoadLibrary(_path)