Building a shared library#
This section describes building a tiny shared library implemented in
Modula-2 and built with libtool.  Suppose a project consists of
two definition modules and two implementation modules and a program
module a.def, a.mod, b.def, b.mod and
c.mod.  The first step is to compile the modules using position
independent code.  This can be achieved by the following three
commands:
libtool --tag=CC --mode=compile gm2 -g -c a.mod -o a.lo
libtool --tag=CC --mode=compile gm2 -g -c b.mod -o b.lo
libtool --tag=CC --mode=compile gm2 -g -c c.mod -o c.lo
The second step is to generate the shared library initialization and finalization routines. We can do this by asking gm2 to generate a list of dependant modules and then use this to generate the scaffold. We also must compile the scaffold.
gm2 -c -g -fmakelist c.mod
gm2 -c -g -fmakeinit -fshared c.mod
libtool --tag=CC --mode=compile g++ -g -c c_m2.cpp -o c_m2.lo
The third step is to link all these .lo files.
libtool --mode=link gcc -g c_m2.lo a.lo b.lo c.lo \
        -L$(prefix)/lib64 \
        -rpath `pwd` -lgm2 -lstdc++ -lm -o libabc.la
At this point the shared library libabc.so will have been
created inside the directory .libs.