Below is an outline of the files structure required for statically
linking SWI-Prolog with foreign extensions. ... /pl
refers
to the SWI-Prolog home directory (see feature/2). <arch>
refers to the architecture identifier that may be obtained using feature/2.
...
/pl/runtime/<arch>/libpl.a | SWI-Library |
... /pl/include/SWI-Prolog.h | Include file |
... /pl/include/SWI-Stream.h | Stream I/O include file |
... /pl/include/SWI-Exports | Export declarations (AIX only) |
... /pl/include/stub.c | Extension stub |
The definition of the foreign predicates is the same as for dynamic
linking. Unlike with dynamic linking however, there is no initialisation
function. Instead, the file ... /pl/include/stub.c
may be
copied to your project and modified to define the foreign extensions.
Below is stub.c, modified to link the lowercase example described later
in this chapter:
Now, a new executable may be created by compiling this file and linking it to libpl.a from the runtime directory and the libraries required by both the extensions and the SWI-Prolog kernel. This may be done by hand, or using the plld utility described in secrefplld.