Building and using Win32 DLLs

The Glasgow Haskell Compiler User's Guide, Version 5.04
Prev |  | Next

# Chapter 11. Building and using Win32 DLLs

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.

Until recently, strip didn't work reliably on DLLs, so you should test your version with care, or make sure you have the latest binutils. Unfortunately, we don't know exactly which version of binutils cured the problem (it was supposedly fixed some years ago).

# 11.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     4608 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 of linking them in statically.

4K for a `"hello, world"` application—not bad, huh? :-)

Prev | Home | Next
Writing Haskell interfaces to C code: hsc2hs |  | Not linking with DLLs