[Ecls-list] Embedding C++ code in LISP under Windows

Dietrich Bollmann dietrich at formgames.org
Mon Jun 17 04:21:18 UTC 2013

Hi Juanjo,

Thank you!

It was too late in the night when I wrote this email to think clearly:  I
tried to apply my experiences from embedding C++ code via the ECL FFI on my
Mac to Windows... Not a good strategy :)

In both cases I got the same error messages being caused by the compiler
misinterpreting the C++ code as C code.

In the case of my Mac recompiling ECL with '--with-cxx' was the solution.

On Windows, however, the problem is caused by 'asdf:make-build' generating
a file with the extension .c which makes the compiler interpreting the code
as C code.  The command line option /TP can be use to force the compiler to
interpret the content of the file as C++ code.  (See the page "/Tc, /Tp,
/TC, /TP (Specify Source File Type)" at
http://msdn.microsoft.com/en-us/library/032xwy55.aspx .)

Doing so a second error is thrown:  error C4716: 'main_lib_CUBE' : must
return a value ('cube' is the name I called the library). The
option /wo4716 can be used to turn it into a warning resulting in the
library being built. (See "/w, /Wn, /WX, /Wall, /wln, /wdn, /wen, /won
(Warning Level)" at http://msdn.microsoft.com/en-us/library/thxezb7y.aspx )

Here my current solution which builds the library:

In my Makefile:

--- Makefile---
cube.lib: cube.asd cube.lisp Cube.obj
ecl -norc -load cube-build.lisp

The file with the LISP code used to build the library:

---  cube-build.lisp ---
(require :asdf)
(push "./" asdf:*central-registry*)
(let ((COMPILER::*cc-flags* (concatenate 'string COMPILER::*cc-flags* " /TP
/wo4716 "))
      (COMPILER::*ld-bundle-flags* (concatenate 'string
COMPILER::*ld-bundle-flags* " Cube.obj ")))
  (asdf:make-build :cube :type :static-library :move-here "./cube.lib"))

On the long term a better solution might be

  - to add some option to 'asdf:make-build' which takes either ':c' or
'cpp' as value (with ':c' being the derault) and generates a file with the
respective extension;
  - to change the LISP to C / C++ compiler so that the generated function
'main_lib_NAMEOFLIBRARY' actually returns a value.

Thanks for you help,


On Mon, Jun 17, 2013 at 12:36 AM, Juan Jose Garcia-Ripoll <
juanjose.garciaripoll at gmail.com> wrote:

> On Sat, Jun 15, 2013 at 11:47 AM, Dietrich Bollmann <
> dietrich at formgames.org> wrote:
>> How can I build ECL on Windows in a way which allows to embed C++ code as
>> well?
> The Windows compiler is a C++ compiler, AFAIK. You should not need to do
> anything extra.
> --
> 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/20130617/9027b531/attachment.html>

More information about the ecl-devel mailing list