[iolib-devel] net.sockets fails to grovel.

elliott elliott at elliottjohnson.net
Thu Sep 25 16:07:56 UTC 2008


Hi,

I posted about this on cffi-devel and was redirected here.

I'm running linux (kernel 2.6.26), glibc 2.8, sbcl 1.0.20.30, and 
iolib/cffi from their respective scm's.  The asdf load-op fails when 
groveling the "grovel.c" file in net.sockets with the following error:

 > External process exited with code 1.
 > Command was: "gcc" "-m32" "-fPIC" "-o" 
"/home/elliott/source/git/iolib/net.sockets/grovel" 
"/home/elliott/source/git/iolib/net.sockets/grovel.c"
 > Output was:
 > /home/elliott/source/git/iolib/net.sockets/grovel.c: In function 'main':
 > /home/elliott/source/git/iolib/net.sockets/grovel.c:1705: error: 
invalid application of 'sizeof' to incomplete type 'struct ucred'
 > /home/elliott/source/git/iolib/net.sockets/grovel.c:1711: error: 
dereferencing pointer to incomplete type
 > /home/elliott/source/git/iolib/net.sockets/grovel.c:1716: error: 
dereferencing pointer to incomplete type
 > /home/elliott/source/git/iolib/net.sockets/grovel.c:1721: error: 
dereferencing pointer to incomplete type
 >
 >  [Condition of type SIMPLE-ERROR]
 >
 > Restarts:
 >  0: [TRY-RECOMPILING] Try recompiling grovel
 >  1: [RETRY] Retry performing #<ASDF:COMPILE-OP NIL {B4F0881}> on 
#<CFFI-GROVEL:GROVEL-FILE "grovel" {B743CA9}>.
 >  2: [ACCEPT] Continue, treating #<ASDF:COMPILE-OP NIL {B4F0881}> on 
#<CFFI-GROVEL:GROVEL-FILE "grovel" {B743CA9}> as having been successful.
 >  3: [ABORT] Return to SLIME's top level.
 >  4: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" 
RUNNING {ADDC0C9}>)
 >
 > Backtrace:
 >  0: (CFFI-GROVEL::INVOKE "gcc")[:EXTERNAL]
 >  1: (CFFI-GROVEL:PROCESS-GROVEL-FILE 
#P"/home/elliott/source/git/iolib/net.sockets/grovel.lisp" #P"/home..
 >  2: ((SB-PCL::FAST-METHOD ASDF:PERFORM (ASDF:COMPILE-OP 
CFFI-GROVEL:GROVEL-FILE)) ..)
 >  3: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. 
SB-PCL::.ARG1.)) ..)
 >  4: ((SB-PCL::FAST-METHOD ASDF:PERFORM :AROUND (ASDF:COMPILE-OP 
CFFI-GROVEL::CC-FLAGS-MIXIN)) ..)
 >  5: ((SB-PCL::FAST-METHOD ASDF:PERFORM :AROUND (ASDF:COMPILE-OP 
ASDF:CL-SOURCE-FILE)) ..)
 >  6: ((LAMBDA ()))
 >  7: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK))
 >  8: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]508))
 >  9: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK ..)
 > 10: (SB-C::%WITH-COMPILATION-UNIT #<CLOSURE (LAMBDA #) 
{BAE106D}>)[:EXTERNAL]
 > 11: (ASDF:OPERATE ASDF:LOAD-OP IOLIB)[:EXTERNAL]

In doing some searching online I found that glibc now wraps the ucred 
struct in USE_GNU.  This seems to be a glibc 2.8 bug, so in my opinion I 
don't think valid for iolib to account for.  The work around I've put in 
place is to add ':cc-flags ("-D_GNU_SOURCE")' to the net.sockets.asd's 
grovel-file and wrapper-file components and all compiles fine for me.

elliott



More information about the iolib-devel mailing list