[Ecls-list] I do not understand how to link C modules with Lisp main prog

Juan Jose Garcia Ripoll worm at arrakis.es
Tue Apr 1 02:18:20 UTC 2003

On Monday 24 March 2003 18:05, Moshe Goldstein wrote:
> In summary:
> I wrote several Lisp functions that invoke C functions that I took from
> an open-source package. I compiled all the C program pieces using the -c
> -ansi options of gcc.
> I need to link all the pieces together to build a running program.
> The only thing I need in order to understand how to do it with ECL, is a
> complete tiny example, or a clear explanation of how to do it.

A scheme of how your linking stuff would look like:

(defvar *my-c-program-prologue* "
	/* All stuff which initializes your C libraries and registers your C
	   functions with ECL */

(defvar *my-c-program-epilogue* "
	/* When you do not want the lisp toplevel to handle the execution
	   write your own code here. Otherwise, set *my-c-program-epilogue* to
	  NIL. */

(if *my-c-program-epilogue*
  (c:build-program "myecl"
	:lisp-files '("hello.o")
	:ld-flags '("first-object-file.o" "second-object-file.o" "-Lf2c" ...)
	:prologue-code *my-c-program-prologue*
	:epilogue-code *my-c-program-epilogue*)
  (c:build-program "myecl"
	:lisp-files '("hello.o")
	:ld-flags '("first-object-file.o" "second-object-file.o" "-Lf2c" ...)
	:prologue-code *my-c-program-prologue*))

1) The PROLOGUE code is intended to perform initialization of your 
C/C++/FORTRAN/... stuff.

2) The EPILOGUE code should only be present when you want to replace the lisp 
toplevel (the interactive read-eval-execute loop) with your own routines.

3) :LD-FLAGS lists all flags to be passed to the linker. It includes your 
C/C++/FORTRAN/etc, object files, your favourite libraries, special flags, 

I am sorry I cannot supply a better example, but lacking a lot of free time, I 
decided to give priority to making ECL more stable and less buggy and not so 
much to write examples. This is where other people could easily contribute 


More information about the ecl-devel mailing list