[Ecls-list] c-inline conflict in cl-user
Dave Roberts
dave at vyatta.com
Thu Jul 6 03:33:48 UTC 2006
On Wed, 2006-07-05 at 09:34 +0200, Goffioul Michael wrote:
> Are tou sure you didn't use C-INLINE symbol elsewhere before trying
> to use-package FFI?
Here's what I'm doing. Maybe it's pilot error. If so, please excuse and
educate me (I'm starting to wonder if I don't need EVAL-WHEN here?). I'm
trying to compile and load this simple FFI example. Just 3 forms, that's
it.
(use-package "FFI")
(Clines
"#include <sys/time.h>")
(defun gettimeofday ()
(c-inline () () (values :int :int :int :int :int)
"struct timeval tv;
struct timezone tz;
int ret = gettimeofday(&tv, &tz);
@(return 0)=ret;
@(return 1)=tv.tv_sec;
@(return 2)=tv.tv_usec;
@(return 3)=tz.tz_minuteswest;
@(return 4)=tz.tz_dsttime;" :one-liner nil))
When with this file, which I named eclffi.lisp, do the following:
1. Start ecl
2. Compile the file with (compile-file "eclffi.lisp")
3. Load the file with (load-file "eclffi")
4. Note the error.
Transcript below. It's almost as if the act of loading the file delays
the (USE-PACKAGE "FFI") form until after the (DEFUN GETTIMEOFDAY...)
form has already been read and the C-INLINE symbol is already interned
in CL-USER by the time the (USE-PACKAGE "FFI") executes.
[dave at linux ~]$ ecl/bin/ecl
ECL (Embeddable Common-Lisp) 0.9i
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2000 Juan J. Garcia-Ripoll
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help. Broken at EVAL.
> (compile-file "eclffi.lisp")
;;; Loading #P"/home/dave/ecl/lib/ecl/cmp.fas"
;;; Loading #P"/home/dave/ecl/lib/ecl/sysfun.lsp"
;;; Compiling eclffi.lisp.
;;; Compiling (DEFUN GETTIMEOFDAY ...).
;;; End of Pass 1.
;;; Note: Emiting FUNCALL for CLINES
;;; Emitting code for GETTIMEOFDAY.
;;; Note: Emitting linking call for C-INLINE
;;; Calling the C compiler...
;;; Note: Invoking external command:
;;; gcc -g -O2 -fPIC -fstrict-aliasing -Dlinux -O "-
I/home/dave/ecl/lib/ecl/" -w -c "/home/dave/eclffi.c" -o
"/home/dave/eclffi.o"
;;; Note: Invoking external command:
;;; gcc -o "/home/dave/eclffi.fas" -L"/home/dave/ecl/lib/ecl/"
"/home/dave/eclffi.o" -Wl,--rpath,/home/dave/ecl/lib/ecl/ -shared -
lecl -ldl -lm -lgmp
;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3
;;; Finished compiling eclffi.lisp.
#P"/home/dave/eclffi.fas"
NIL
NIL
> (load "eclffi")
;;; Loading #P"/home/dave/eclffi.fas"
Cannot use #<"FFI" package>
from #<"COMMON-LISP-USER" package>,
because FFI:C-INLINE and C-INLINE will cause
a name conflict.
Broken at LOAD.
>>
More information about the ecl-devel
mailing list