Aha! I knew about import libraries, but didn't know I needed one in this situation. Thanks.
On Wed, Nov 21, 2012 at 2:21 PM, Kon Lovett <[email protected]> wrote: > > On Nov 21, 2012, at 1:13 PM, Matt Gushee <[email protected]> wrote: > > > Hi-- > > > > I am developing a project that is going to use plugins. It's at a very > early stage, and I am not at all sure how the details of the system will > work, but my thinking at this point is that the plugins: > > > > - may be either compiled or interpreted, but will usually be > > compiled as shared libraries; and > > - will be stored in one or more arbitrary locations separate from > > the system's egg repository. > > - should ideally be implemented as modules. > > > > So I think what I want to do is to load shared libraries containing > modules into compiled code. Toward that end, I have been experimenting with > some toy code to try to understand the various ways that different > compilation units interact. I have four library units, 'a', 'b', 'c', and > 'd', and two top-level units, 'ab' (which uses 'a' and 'b'), and 'cd' > (which uses 'c' and 'd'). The important difference between the libraries is > that 'c' and 'd' declare modules, while 'a' and 'b' do not. Here's the > code: > > > > ; a.scm > > (define (ay) (print "Ay, what's 'appening?")) > > > > ; b.scm > > (define (bee) (print "2B or not 2B?")) > > > > ; c.scm > > (module c > > * > > (import scheme) > > (import chicken) > > > > (define (see) (print "See Spot run.")) > > > > ) > > > > ; d.scm > > (module d > > * > > (import scheme) > > (import chicken) > > > > (define (dee) (print "Defenestrate depraved demons.")) > > > > ) > > > > ; ab.scm > > (load-relative "a.so") > > (load-relative "b.so") > > > > (ay) > > (bee) > > > > : cd.scm > > (load-relative "c.so") > > (load-relative "d.so") > > > > (import c) > > (import d) > > > > (see) > > (dee) > > > > And here's what happens when I try to work with them: > > > > $ csc -dynamic a.scm > > $ csc -dynamic b.scm > > $ csc -dynamic c.scm > > $ csc -dynamic d.scm > > $ csi > > > > CHICKEN > > (c)2008-2012 The Chicken Team > > (c)2000-2007 Felix L. Winkelmann > > Version 4.8.0 (rev 0db1908) > > linux-unix-gnu-x86 [ manyargs dload ptables ] > > compiled 2012-09-24 on debian (Linux) > > > > ... [ loading ~/.csirc and various eggs ] ... > > > > csi> (load "ab.scm") > > ; loading ab.scm ... > > ; loading a.so ... > > ; loading b.so ... > > Ay, what's 'appening? > > 2B or not 2B? > > csi> (load "cd.scm") > > ; loading cd.scm ... > > ; loading c.so ... > > ; loading d.so ... > > See Spot run. > > Defenestrate depraved demons. > > csi> > > $ csc ab.scm > > $ ./ab > > Ay, what's 'appening? > > 2B or not 2B? > > $ csc cd.scm > > > > Syntax error (import): cannot import from undefined module > > > > c > > You need an "import" file for module c. They are not generated > automatically. > > csc c.scm -dynamic -emit-import-library c ; csc c.scm -s -j c > csc c.import.scm -dynamic > > > > > By the way, in addition to 'load-relative', I've also tried loading the > libs by means of 'require' (with and without the so-name), 'load', and > 'require-library'. In no case have I managed to compile a unit that loads a > library containing a module. > > > > So, I hope it is reasonably clear what I am trying to do here. Is this > > something that is supposed to work? Is there perhaps a compiler > directive that would solve this problem? > > > > -- > > Matt Gushee > > > > _______________________________________________ > > Chicken-users mailing list > > [email protected] > > https://lists.nongnu.org/mailman/listinfo/chicken-users > >
_______________________________________________ Chicken-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/chicken-users
