Next: , Previous: Building DLLs with GNAT Project files, Up: Microsoft Windows Topics

G.10 Building DLLs with GNAT

This section explain how to build DLLs using the GNAT built-in DLL support. With the following procedure it is straight forward to build and use DLLs with GNAT.

  1. building object files

    The first step is to build all objects files that are to be included into the DLL. This is done by using the standard gnatmake tool.

  2. building the DLL

    To build the DLL you must use gcc's -shared and -shared-libgcc options. It is quite simple to use this method:

              $ gcc -shared -shared-libgcc -o api.dll obj1.o obj2.o ...

    It is important to note that in this case all symbols found in the object files are automatically exported. It is possible to restrict the set of symbols to export by passing to gcc a definition file, see The Definition File. For example:

              $ gcc -shared -shared-libgcc -o api.dll api.def obj1.o obj2.o ...

    If you use a definition file you must export the elaboration procedures for every package that required one. Elaboration procedures are named using the package name followed by "_E".

  3. preparing DLL to be used

    For the DLL to be used by client programs the bodies must be hidden from it and the .ali set with read-only attribute. This is very important otherwise GNAT will recompile all packages and will not actually use the code in the DLL. For example:

              $ mkdir apilib
              $ copy *.ads *.ali api.dll apilib
              $ attrib +R apilib\*.ali

At this point it is possible to use the DLL by directly linking against it. Note that you must use the GNAT shared runtime when using GNAT shared libraries. This is achieved by using -shared binder's option.

     $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI