[Numpy-discussion] ctypes: how does load_library work ?
David Cournapeau
david at ar.media.kyoto-u.ac.jp
Fri Aug 18 00:54:44 EDT 2006
Hi,
I am investigating the use of ctypes to write C extensions for
numpy/scipy. First, thank you for the wiki, it makes it easy to
implement in a few minutes a wrapper for a C function taking arrays as
arguments.
I am running recent SVN version of numpy and scipy, and I couldn't
make load_library work as I expected: Let's say I have a libhello.so
library on linux, which contains the C function int sum(const int* in,
size_t n). To wrap it, I use:
import numpy as N
from ctypes import cdll, POINTER, c_int, c_uint
_hello = cdll.LoadLibrary('libhello.so')
_hello.sum.restype = c_int
_hello.sum.artype = [POINTER(c_int), c_uint]
def sum(data):
return _hello.sum(data.ctypes.data_as(POINTER(c_int)), len(data))
n = 10
data = N.arange(n)
print data
print "sum(data) is " + str(sum(data))
That works OK, but to avoid the platform dependency, I would like to use
load_library from numpy: I just replace the cdll.LoadLibrary by :
_hello = N.ctypeslib.load_library('hello', '.')
which does not work. The python interpreter returns a strange error
message, because it says hello.so.so is not found, and it is looking for
the library in the directory usr/$(PWD), which does not make sense to
me. Is it a bug, or am I just not understanding how to use the
load_library function ?
David
More information about the NumPy-Discussion
mailing list