Sorry that should have been:
(cffi:foreign-funcall "srand" :unsigned-int 55 :void)
But the issue happens the same.
On Nov 22, 2012, at 2:41 PM, Sylvain Ageneau <agen...@gmail.com> wrote:
> I think there's an issue with void functions, for example:
>
> (cffi:defcfun ("srand" c-srand) :void '(:unsigned-int))
>
> (defun test-srand ()
> "invokes srand function"
> (cffi:foreign-funcall "srand"))
>
> (test-srand)
>
>
> ;;;
> ;;; Compiling cffi-test.lisp.
> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
> ;;;
> ;;; Compiling (CFFI:DEFCFUN ("srand" C-SRAND) ...).
> ;;; Compiling (DEFUN TEST-SRAND ...).
> ;;; End of Pass 1.
> ;;; Emitting code for C-SRAND.
> ;;; Error:
> ;;; in file cffi-test.lisp, position 415
> ;;; at (DEFCFUN (srand C-SRAND) ...)
> ;;; * Used @(RETURN 0) in a C-INLINE form with 0 output values
> ;;; Loading "/Users/sylvain/src/LISP/cffi_ecl/cffi-test.fas"
>
>
>
> On Nov 22, 2012, at 11:53 AM, Sylvain Ageneau <agen...@gmail.com> wrote:
>
>> Great!
>>
>> I'll try that and report back. Many thanks.
>>
>> On Nov 22, 2012, at 11:16 AM, Juan Jose Garcia-Ripoll
>> <juanjose.garciarip...@gmail.com> wrote:
>>
>>> I am attaching a patch for CFFI that allows ECL to build code that does not
>>> use dlopen() but rather uses the function symbols as they are know to the C
>>> compiler. This is best explained in the code comments, which I reproduce
>>> below, and in the example.
>>>
>>> The patched CFFI is available at my github account
>>> https://github.com/juanjosegarciaripoll/cffi
>>>
>>> This is how the example is used
>>>
>>> bash-3.2$ ecl -norc
>>> ECL (Embeddable Common-Lisp) 12.7.1
>>> (git:e95fa190ccab10a5dcca791658d7d3ff24a77240)
>>> 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>.
>>> > (load "build")
>>> [...]
>>> To load "cffi":
>>> Load 1 ASDF system:
>>> cffi
>>> ; Loading "cffi"
>>>
>>> ;;;
>>> ;;; Compiling cffi-test.lisp.
>>> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
>>> ;;;
>>> ;;; Compiling (CFFI:DEFCFUN ("sin" C-SINE) ...).
>>> ;;; Compiling (DEFUN FF-C-SINE ...).
>>> ;;; End of Pass 1.
>>> ;;; Emitting code for C-SINE.
>>> ;;; Emitting code for FF-C-SINE.
>>> ;;; Finished compiling cffi-test.lisp.
>>> ;;;
>>> ;;; Loading "/Users/jjgarcia/build/cffi-static/cffi-test.fas"
>>>
>>> sin(pi) = 1.22464679914735320720000000000000d-16
>>> #P"/Users/jjgarcia/build/cffi-static/build.lisp"
>>>
>>> This is the self-explanatory comment
>>>
>>> ;;;
>>> ;;; ECL allows many ways of calling a foreign function, and also many
>>> ;;; ways of finding the pointer associated to a function name. They
>>> ;;; depend on whether the FFI relies on libffi or on the C/C++ compiler,
>>> ;;; and whether they use the shared library loader to locate symbols
>>> ;;; or they are linked by the linker.
>>> ;;;
>>> ;;; :DFFI
>>> ;;;
>>> ;;; ECL uses libffi to call foreign functions. The only way to find out
>>> ;;; foreign symbols is by loading shared libraries and using dlopen()
>>> ;;; or similar.
>>> ;;;
>>> ;;; :DLOPEN
>>> ;;;
>>> ;;; ECL compiles FFI code as C/C++ statements. The names are resolved
>>> ;;; at run time by the shared library loader every time the function
>>> ;;; is called
>>> ;;;
>>> ;;; :C/C++
>>> ;;;
>>> ;;; ECL compiles FFI code as C/C++ statements, but the name resolution
>>> ;;; happens at link time. In this case you have to tell the ECL
>>> ;;; compiler which are the right ld-flags (c:*ld-flags*) to link in
>>> ;;; the library.
>>> ;;;
>>> (defvar *cffi-ecl-method*
>>> #+dffi :dffi
>>> #+(and dlopen (not dffi)) :dlopen
>>> #-(or dffi dlopen) :c/c++
>>> "The type of code that CFFI generates for ECL: :DFFI when using the
>>> dynamical foreign function interface; :DLOPEN when using C code and
>>> dynamical references to symbols; :C/C++ for C/C++ code with static
>>> references to symbols.")
>>>
>>>
>>> --
>>> Instituto de FĂsica Fundamental, CSIC
>>> c/ Serrano, 113b, Madrid 28006 (Spain)
>>> http://juanjose.garciaripoll.googlepages.com
>>> <build.lisp><cffi-test.lisp><0001-Allow-the-ECL-backend-to-support-different-combinati.patch>
>>
>
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Ecls-list mailing list
Ecls-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ecls-list