[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Modules in shared libs?
From: |
Kon Lovett |
Subject: |
Re: [Chicken-users] Modules in shared libs? |
Date: |
Wed, 21 Nov 2012 13:21:18 -0800 |
On Nov 21, 2012, at 1:13 PM, Matt Gushee <address@hidden> 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
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/chicken-users