2.1 What can ECL do?
Some day for some reasons you will be in the need to distribute code that
has been developed using ECL. In the following sections we will describe
the means that ECL offers you to do so. Basically, these are the
alternatives
- Source code
- You distribute your programs in source code form. This is the easiest and most
portable way, but not the fastest one.
- Standalone programs
- You translate all your lisp code to C using the ECL compiler. The final
object files can be linked against other C/C++ libraries to obtain a standalone
executable.
- You can build statically and dynamically linked libraries.
- You translate all your lisp code to C and combine the resulting object files
into a single library with .a extension. You can distribute this library
to other people and the final users can utilize these libraries to build
standalone programs.
- You can build dynamically loadable files.
- This is the most flexible way. You translate all lisp code to C and link it
against possibly other C/C++ libraries to obtain a dynamically loadable library
(file type .so under unix). This library can be loaded a startup time to
add new functionality to the ECL environment.
In several of these options, we have mentioned the possibility to include C/C++
code. Even if this is possible, you cannot use ordinary C/C++ compilers and
makefiles to build ECL extensions, let it be programs or
libraries. Briefly, you have to organize your code as follows
- Organize the C code as a library, let it be static or dynamic.
- Build a function, say
mymain()
, in which the initialization phase
for your library is performed.
- Group the code that interfaces to Lisp in separate C files, all of which
should include
#include <ecl/ecl.h>
at the beginning.
- Compile your lisp source files.
- Let ECL build the final executable or library.
In the final step there are ways to instruct ECL to call your
initialization function (mymain()
in the example above). These means
are explained in the following sections.