Calling a shared library using C types

Nathan Harmston iwanttobeabadger at googlemail.com
Mon Mar 24 18:56:08 EDT 2008


Hi,

I know this is a pretty simple question but I've spent a while on this and
can't see whats wrong. I'm trying to access a shared library which I've
created called Simulation.so, its created as such (snip from makefile):

all: simulation

simulation: Simulation.so

Simulation.so: Simulation.o Statistics.o
        gcc -shared Simulation.o Statistics.o -L/usr/local/lib -lsbml
-lstdc++ -lm -o Simulation.so

Statistics.o: Statistics.c Statistics.h
        gcc -fpic -g -O2 -I/usr/include -c Statistics.c

Simulation.o: Simulation.c
        gcc -fpic -g -O2 -I/usr/include  -c Simulation.c

and I can load it properly in python

import ctypes
t = ctypes.CDLL('./Simulation.so')
this works fine, I have a simple function I ve put in for testing which just
returns the integer 4. However when I try to access this function it doesnt
work
t.test()
 File "<stdin>", line 1, in <module>
  File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/__init__.py",
line 325, in __getattr__
    func = self.__getitem__(name)
  File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/__init__.py",
line 330, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: dlsym(0x81e6b0, test): symbol not found

I've tried using
t.__getattr__("test")
but still have the same exception, I've tried loading the library with mode
= RTLD_GLOBAL aswell and still have no luck. As far I as I can see this
should work? But as I am just starting with ctypes I am sure I doing
something sorry very stupid.

Any pointers would be greatly appreciated,

Many thanks in advance,

Nathan


Im hoping python-list is ok for questions regarding ctypes :S
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080324/35ec7cc1/attachment.html>


More information about the Python-list mailing list