Chapter 10. Building and using Win32 DLLs

Table of Contents
10.1. Linking with DLLs
10.2. Not linking with DLLs
10.3. Creating a DLL
10.4. Making DLLs to be called from other languages

On Win32 platforms, the compiler is capable of both producing and using dynamic link libraries (DLLs) containing ghc-compiled code. This section shows you how to make use of this facility.

strip seems not to work reliably on DLLs, so it's probably best not to.

10.1. Linking with DLLs

The default on Win32 platforms is to link applications in such a way that the executables will use the Prelude and system libraries DLLs, rather than contain (large chunks of) them. This is transparent at the command-line, so

sh$ cat main.hs
module Main where
main = putStrLn "hello, world!"
sh$ ghc -o main main.hs
ghc: module version changed to 1; reason: no old .hi file
sh$ strip main.exe
sh$ ls -l main.exe
-rwxr-xr-x   1 544      everyone     6144 May  3 17:11 main.exe*
sh$ ./main
hello, world!
sh$ 

will give you a binary as before, but the main.exe generated will use the Prelude and RTS DLLs instead.

6K for a "hello, world" application---not bad, huh? :-)