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