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 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users