
On Fri, 2008-09-12 at 18:35 +0100, Andrew Coppin wrote:
Jonathan Cast wrote:
On Fri, 2008-09-12 at 18:07 +0100, Andrew Coppin wrote:
And what exactly does a "strip" mean, then?
Remove the symbol table. And, for C, other debugging information.
Historically, I believe, on Unix the distinction between an executable and an object file was weaker than it is now (so, for example, a.out was originally the default name of an object file, back when you didn't always need to link in a library). So (and this is still sometimes true on linux) the linker's output could be used as input to the linker. Unix linkers still include the combined symbol table in the executables they generate, to allow this. But if your executable is complete, you don't need a symbol table, so Unix includes a program `strip' that removes it from an executable (or object file, if you do something stupid).
GHC's Windows port, of course, uses a port of the Unix toolchain, so the above discussion (almost) completely applies. (Although I don't think any (static) linker actually accepts Windows PE executables as input).
That would certainly explain why the end of my compiled binary contains several miles of ASCII that looks like function names then... ;-)
So if I give GHC the right options, it'll do that for me?
Correct. Finding the right option is left as a Google-enabled exercise for the reader. jcc