Compilation error in Chapter 5 of "Real World Haskell"

I'm trying to do the following from Chapter 5 of "Real World Haskell": Our choice of naming for the source file and function is deliberate. To create an executable, *ghc* expects a module named Main that contains a function named main. The main function is the one that will be called when we run the program once we've built it. 6 commentscomments:%20show%20/%20hide *ghc -o simple Main.hs SimpleJSON.o* ---from http://book.realworldhaskell.org/read/writing-a-library-working-with-json-da... When I do that, I get this error: C:\ch05>ghc -o simple Main.hs SimpleJSON.o [2 of 2] Compiling Main ( Main.hs, Main.o ) Linking simple.exe ... SimpleJSON.o:fake:(.data+0x0): multiple definition of `SimpleJSON_getArray_closure' .\SimpleJSON.o:fake:(.data+0x0): first defined here SimpleJSON.o:fake:(.text+0x54): multiple definition of `SimpleJSON_getArray_info' .\SimpleJSON.o:fake:(.text+0x54): first defined here SimpleJSON.o:fake:(.data+0x4): multiple definition of `SimpleJSON_getObject_closure' .\SimpleJSON.o:fake:(.data+0x4): first defined here What's going wrong here?

On Wed, Aug 17, 2011 at 10:37 AM, Paul Reiners
I'm trying to do the following from Chapter 5 of "Real World Haskell":
Our choice of naming for the source file and function is deliberate. To create an executable, ghc expects a module named Main that contains a function named main. The main function is the one that will be called when we run the program once we've built it. 6 comments
ghc -o simple Main.hs SimpleJSON.o
---from http://book.realworldhaskell.org/read/writing-a-library-working-with-json-da...
When I do that, I get this error:
C:\ch05>ghc -o simple Main.hs SimpleJSON.o [2 of 2] Compiling Main ( Main.hs, Main.o ) Linking simple.exe ... SimpleJSON.o:fake:(.data+0x0): multiple definition of `SimpleJSON_getArray_closure' .\SimpleJSON.o:fake:(.data+0x0): first defined here SimpleJSON.o:fake:(.text+0x54): multiple definition of `SimpleJSON_getArray_info' .\SimpleJSON.o:fake:(.text+0x54): first defined here SimpleJSON.o:fake:(.data+0x4): multiple definition of `SimpleJSON_getObject_closure' .\SimpleJSON.o:fake:(.data+0x4): first defined here
What's going wrong here?
It's hard to say without being able to compile your example locally. Could you post the exact files Main.hs and SimpleJSON.hs that you are using? I scanned the linked page but it wasn't obvious to me what was in your source files. Jason

This is a linking issue. It seems GHC 7 automatically feeds the linker SimpleJSON.o so when you explicitly provide it too then you get those conflicts. All you need to do is call:
ghc -o simple Main.hs
Unless you're using GHC 6, then the original command is correct:
ghc -o simple Main.hs SimpleJSON.o
Or even better, use the --make flag as that works with either version:
ghc --make -o simple Main.hs
Cheers,
Thomas
On Wed, Aug 17, 2011 at 10:37 AM, Paul Reiners
I'm trying to do the following from Chapter 5 of "Real World Haskell":
Our choice of naming for the source file and function is deliberate. To create an executable, ghc expects a module named Main that contains a function named main. The main function is the one that will be called when we run the program once we've built it. 6 comments
ghc -o simple Main.hs SimpleJSON.o
---from http://book.realworldhaskell.org/read/writing-a-library-working-with-json-da...
When I do that, I get this error:
C:\ch05>ghc -o simple Main.hs SimpleJSON.o [2 of 2] Compiling Main ( Main.hs, Main.o ) Linking simple.exe ... SimpleJSON.o:fake:(.data+0x0): multiple definition of `SimpleJSON_getArray_closure' .\SimpleJSON.o:fake:(.data+0x0): first defined here SimpleJSON.o:fake:(.text+0x54): multiple definition of `SimpleJSON_getArray_info' .\SimpleJSON.o:fake:(.text+0x54): first defined here SimpleJSON.o:fake:(.data+0x4): multiple definition of `SimpleJSON_getObject_closure' .\SimpleJSON.o:fake:(.data+0x4): first defined here
What's going wrong here?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Jason Dagit
-
Paul Reiners
-
Thomas DuBuisson