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
_______________________________________________
iolib-devel mailing list
[email protected]
http://common-lisp.net/cgi-bin/mailman/listinfo/iolib-devel

Reply via email to