Hi Sean,
I'm not sure whether this will solve your exact problem, but here's a full example of generating a shared library (.so) where functions are implemented in Scheme and called from C:
http://toute.ca/tmp/gambit_dynamic_library.tar.gz
Just run "make test" to see it work.
Hope this helps,
Guillaume
On 2/6/07, Sean D'Epagnier
<sean@depagnier.com> wrote:
Sorry I forgot to insert my message:
I have a program written in c that dlopens shared libraries
that contain math functions. I would like to have the option
to write these functions in scheme without adding too much
plumbing to the c code. I would just give it the .so name
I tried to use the c-define special form as it can wrap regular
scheme procedures. I compiled the output from gsc to a .so
file using gcc, and dlopened it with a simple c program, I got
the function pointer, but when I called it I get:
Program received signal SIGSEGV, Segmentation fault.
0x00002aaaab31acf5 in ___garbage_collect () from ./libtest.so
I saw the server.scm and client.c example in the /tests directory.
Would it make sense to put this setup code in the shared library's
init routine? What if I load multiple libraries this way?
For a test I put this setup code in the sample c program, but it
requires the "#define SCHEME_LIBRARY_LINKER" macro to be set to a name,
this is a bit of a problem since I don't know the name and I want
to load an arbitrary number of libraries.
I did for a test put in the name of the sample library, and it did
work when I called the function pointer I got from dlsym.
Any hints on how to get around the SCHEME_LIBRARY_LINKER restriction?
Thanks
Sean
_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list