I compiled my helloworld.hs and got a helloworld.o file, I tried ./helloworld, but it didn't work, so what is the right way to execute the helloworld? I am using cygwin, I just write down $ ghc --make helloworld.hs and I get helloworld.hi, helloworld.exe.manifest, helloworld.o files, I don't know what do I need to do next...
As you haven't specified anything about how you compiled, such as for instance what compiler you're using, we can only guess. The common way to get a .o (object) file out of ghc is using the -c switch; as the manual says, that means "do not link". The mnemonic is "compile only". Without linking, you have only a portion of a program, and it cannot be executed. Precisely what it needs to be linked against will depend on the particular object file, and some of that is filled in by default if you simply let the compiler run the linker. Linking separately is more complicated.
Depending on whether you used a Cygwin ghc or a Windows native ghc, you got either a.out
(a historical traditional name) or helloworld.exe
. If you have a.out
you'll need to rename it to something.exe
to execute it on Windows.
You can easily tell ghc how to call the executable: ghc -o helloworld.exe --make helloworld.hs
.
By the way ghc --help
would have told you:
To compile and link a complete Haskell program, run the compiler like so:
ghc-6.8.2 --make Main
where the module Main is in a file named Main.hs (or Main.lhs) in the current directory. The other modules in the program will be located and compiled automatically, and the linked program will be placed in the filea.out' (or
Main.exe' on Windows).