[Ecls-list] SIMPLE-ERROR: In interpreted code, attempted to call a foreign function but ECL was build without support for that.

Dietrich Bollmann dietrich at formgames.org
Wed May 22 13:54:14 UTC 2013

Hi Juan,

On Tue, May 21, 2013 at 6:13 PM, Juan Jose Garcia-Ripoll <
juanjose.garciaripoll at gmail.com> wrote:

> The CFFI model is simply too rigid: they assume that libraries can be
> loaded at run time, always. Instead ECL supports also a model in which
> libraries are linked with the compiled code, being available that way. I
> fear there is no way to work around this but using ECL's own FFI mingled
> with CFFI
> > (ql:quickload :cffi)
> > (compile-file "foo.lsp" :load t)

Here what I get when trying this on windows:

 $ /cygdrive/c/Users/dietrich/home/cs/lang/lisp/ecl/64/git/install/ecl.exe
;;; Loading
;;; Loading
ECL (Embeddable Common-Lisp) 13.4.1
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.
Top level in: #<process TOP-LEVEL>.
> (ql:quickload :cffi)
To load "cffi":
  Load 1 ASDF system:
; Loading "cffi"

> (compile-file "foo.lsp" :load t)

;;; Compiling foo.lsp
;;; Compiling #<input stream foo.lsp>
;;; Loading

Condition of type: SIMPLE-ERROR
In interpreted code, attempted to call a foreign function
 #<foreign POINTER-VOID>
but ECL was built without support for that.
Available restarts:

1. (RESTART-TOPLEVEL) Go back to Top-Level REPL.

Broken at CFFI-USER::MYCOS. In: #<process TOP-LEVEL>.
(Position #317)
>> :q

Top level in: #<process TOP-LEVEL>.
> (quit)

How can I build ECL to support calling a foreign function?

Thanks a lot,


PS:  The code works on darwin when I change '#+ecl' to '#+(and ecl (not
darwin))' as the -lm option is enough and (ffi:load-foreign-library
"/usr/lib/libm.dylib" :system-library nil) shouldn't be read; on Windows I
used #+(and ecl (not darwin) (not windows)) to avoid the reading
of (ffi:load-foreign-library "/usr/lib/libm.dylib" :system-library nil).

> ----
> ;;; Nothing special about the "CFFI-USER" package.  We're just
> ;;; using it as a substitute for your own CL package.
> (defpackage :cffi-user
>   (:use :common-lisp :cffi))
> (in-package :cffi-user)
> #-ecl
> (progn
>   (define-foreign-library libm
>       (:unix (:or "libm.so" "libm.dylib"))
>     (t (:default "libm")))
>   (use-foreign-library libm))
> #+ecl
> (ffi:load-foreign-library "/usr/lib/libm.dylib" :system-library nil)
> ;;; Initialize libcurl with FLAGS.
> (defcfun (mycos "cos") :double (value :double))
> (format t "C:    cos(~e) = ~g~%" 3.2d0 (mycos 3.2d0))
> (format t "Lisp: cos(~e) = ~g~%" 3.2d0 (cos 3.2d0))
> --
> Instituto de Física Fundamental, CSIC
> c/ Serrano, 113b, Madrid 28006 (Spain)
> http://juanjose.garciaripoll.googlepages.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/ecl-devel/attachments/20130522/8f349255/attachment.html>

More information about the ecl-devel mailing list