[racket] Using raco exe
The problem may be that you are compiling the extension for CGC, but
you're linking and running for 3m. As a result, some local pointers in
the implementation of the extension are invisible to the GC.
Along those lines, my guess is that requiring `web-server/servlet'
changes the timing of a GC so that one occurs during the initialization
of the extension. Pointers then get lost in a way that drops the
instantiation of the extension-implemented module.
At Fri, 11 Jun 2010 14:43:40 +0100, Norman Gray wrote:
>
> Greetings.
>
> I'm having difficulty using raco to build a standalone executable which
> requires both web-server/servlet and an extension. The raco documentation
> seems to suggest that I'm doing the right thing, but I'm getting an error I
> can't really parse. Can anyone help?
>
> The players:
>
> A web server application (which we'll call) s.ss
> And a librdf-extn_rkt.dylib C extension, installed in my user collections
> path, required by s.ss.
> Racket 5.0, and OS X 10.6
>
> Things don't go as smoothly as I'd expect. Viz:
>
> % cat s.ss
> #lang racket
> (require web-server/servlet)
> (require rdf/librdf-extn) # provides librdf:new-world amongst various others
> (printf "server: world ~s~%" (librdf:new-world))
> % racket -v -t s.ss # running it with racket works
> Welcome to Racket v5.0.
> server: world #<cpointer:librdf-world>
> % raco exe -o build/s s.ss
> % build/s # ...but a standalone version doesn't
> link: reference (phase 0) to a variable in module
> '#%embedded:g3708:librdf-extn that is uninitialized (phase level 0); reference
> appears in module: '#%mzc:s in: librdf:new-world
>
> === context ===
> #%mzc:s: [running body]
> loop
>
> % ls -l
> ~/Library/Racket/5.0/collects/rdf/compiled/native/i386-macosx/3m/librdf-extn_rk
> t.dylib
> -rwxr-xr-x 1 norman staff 97068 11 Jun 11:37
> /Users/norman/Library/Racket/5.0/collects/rdf/compiled/native/i386-macosx/3m/li
> brdf-extn_rkt.dylib
> %
>
> Hmm: what is it you're telling me, racket dear?
>
> The module librdf-extn is a C extension, providing an interface to an
> underlying C library. It works OK if I remove the (require
> web-server/servlet). Note that I don't call anything from web-server/servlet
> -- it mere presence seems to be enough to sow untold confusion.
>
>
> Excerpts from the output of raco exe --vv -o build/s s.ss:
>
> Copying to #<path:build/s>
> Getting #<path:/checkouts/me/projects/simbad-lod/src/s.rkt>
> Getting #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/racket/main.rkt>
> Getting #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/racket/base.rkt>
> [...]
> Getting #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/web-server/dispatch/coercion.rkt>
> Getting #<path:/Users/norman/Library/Racket/5.0/collects/rdf/librdf-extn.rkt>
> using extension:
> #<path:/Users/norman/Library/Racket/5.0/collects/rdf/compiled/native/i386-macos
> x/3m/librdf-extn_rkt.dylib>
> Getting #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/racket/runtime-config.rkt>
> Recording extension at
> #<path:/Users/norman/Library/Racket/5.0/collects/rdf/compiled/native/i386-macos
> x/3m/librdf-extn_rkt.dylib>
> Writing module from #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/racket/private/stx.rkt>
> [...]
> Writing module from #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/web-server/servlet.rkt>
> Writing module from #<path:/checkouts/me/projects/simbad-lod/src/s.rkt>
> Writing module from #<path:/Data/LocalApplications/Racket/Racket
> v5.0/collects/racket/runtime-config.rkt>
> Setting command line
>
>
>
> The way that the extension is built is:
>
> make install
> "/Data/LocalApplications/Racket/Racket v5.0/bin/raco" ctool --cc ++ccf -g
> ++ccf -I/Data/tools/librdf-2010-01-20/32bit/include --cgc librdf_bindings.c
> mv librdf_bindings.o build
> "/Data/LocalApplications/Racket/Racket v5.0/bin/raco" ctool ++ldf
> -L/Data/tools/librdf-2010-01-20/32bit/lib ++ldf -lrdf --ld
> build/compiled/native/i386-macosx/3m/librdf-extn_rkt.dylib
> build/librdf_bindings.o
> cp -R build/compiled "/Users/norman/Library/Racket/5.0/collects"/rdf
>
>
>
>
> I'm afraid I'm stumped. Can anyone suggest what I've missed?
>
> Best wishes,
>
> Norman
>
>
> --
> Norman Gray : http://nxg.me.uk
>
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users