[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Units as shared libraries (SWING, dynamic, does not
From: |
felix winkelmann |
Subject: |
Re: [Chicken-users] Units as shared libraries (SWING, dynamic, does not work) |
Date: |
Mon, 13 Dec 2004 07:46:01 +0100 |
On Sat, 11 Dec 2004 16:10:22 +0100, Thomas Chust <address@hidden> wrote:
> >
> > Is there a particular reason for this restriction? How can I work around
> > this issue?
>
> I don't know, why this restriction exists, although I think the reason
> is that it's just easier to hardcode a dynamic function load call for
> "C_toplevel" instead of "C_<unit-name>_toplevel" especially because the
> unit name would not necessarily be correlated with the shared object's
> name...
Yes, that describes the problem pretty well.
>
> I work around this problem by including something like
>
> (cond-expand
> ((or chicken-compile-shared shared)
> )
> (else
> (declare (unit my-unit-name))))
>
> at top of the unit's source code. By the way, I would suggest to add a
> feature to csc: The compiler should declare the features static and/or
> chicken-compile-static as available when compiling code with the -static
> option beause then you could equally easily write something like
Ok, will do.
>
> If you have dynamically generated scheme code including unit
> declarations, you could, if it was absolutely necessary not to modify
> it, rewrap the code by writing another scheme file which would import
> the unit in question and reexport all its symbols. This file you would
> compile and link together with the original compiled wrapper code into a
> shared object. But I admit that this is a clumsy solution (and also an
> untested one ;)
>
Actually `load-library' should work here, provided the code has
been compiled like a normal shared library
% cat yo.scm
(declare (unit yo))
(print "yo!")
% csc yo.scm -vc
/usr/local/bin/chicken yo.scm -output-file yo.c -quiet
gcc yo.c -o yo.o -g -c -DC_NO_PIC_NO_DLL
rm yo.c
% gcc yo.o `chicken-config --libs --cflags` -shared -o libyo.so
% csi
; loading /usr/local/lib/chicken/debug.so ...
; loading library posix ...
; loading library srfi-1 ...
#;1> (load-library 'yo "./libyo.so")
; loading library yo ...
yo!
#t
cheers,
felix