Calling function in shared lib

Olaf Wasmuth olaf at wasmuth.net
Fri Jun 6 06:51:49 EDT 2003


Thomas Heller wrote:

> Olaf Wasmuth <owasmuth at web.de> writes:
> 
>> I am trying to write python code that is able to invoke
>> a function that was compiled into a shared library
>> (actually, FORTRAN routines).  I did succeed for a specific
>> routine in a specific library, but now I want to do this
>> in a more flexible way.
>> 
>> That is, given the library path and the "signature" of the
>> routine (e.g. from a configuration file) at run time, I
>> would like to call this function from within Python. My
>> target platform is Unix (Solaris), so I'm thinking of
>> using the GNU libltdl to access the library and do the
>> call. But how can I feed the parameters into it ? Did
>> anybody do this already, or do you have some pointers
>> for me ?
> 
> Sounds almost like ctypes:
> http://starship.python.net/crew/theller/ctypes/
> although I've never heard it runs on Solaris.
> 
> But I'll gladly accept patches!
> 
> Thomas
Hi Thomas,

the good news is that ctypes works seems to work
(at least somewhat) under Solaris  (!!!):
#!/usr/bin/env python
from ctypes import *

libc = cdll.LoadLibrary("/lib/libc.so")
print libc
libc.sleep( c_int(3) )
print libc.sleep

I get:
<CDLL '/lib/libc.so', handle ff200960 at ee380>
... and then, after 3 seconds ...
<ctypes._CdeclFuncPtr object at 0xe2200>

Nice tool, thanks for your suggestion ! Now I have
to see how this works out with compiled FORTRAN
routines ...

Regards,

Olaf.
--
Python makes me miss Smalltalk less




More information about the Python-list mailing list